Маска прозрачности

Версия Minecraft
1.7.10
355
2
17
Добро, подскажите как можно реализовать такую вот маску? Пример:

1596619532984.png

Типа, чем ближе квадрат к краям, тем прозрачнее его часть становится. Подобный эффект можно увидеть в рулетках всяких.
 
241
6
13
@Sunrise по типу этого
Java:
            tessellator.setColorRGBA_F(0.0f, 0.0f, 0.0f, 0.25f);
            tessellator.addVertex(100, 9.0, 0.0);
            tessellator.addVertex(100, 0.0, 0.0);
            tessellator.setColorRGBA_F(0.0f, 0.0f, 0.0f, 0.0f);
            tessellator.addVertex(50, 0.0, 0.0);
            tessellator.addVertex(50, 9.0, 0.0);
 

Maxik

Золотой Петушок
4,942
46
711
хук в ентити рендерер и все, что заблагорассудится делать можешь.
 
355
2
17
Это не совсем то, мне нужно воссоздать именно маску.
К примеру у меня в этом квадрате будет текстура, еще какой-то рендер, текст, и вот все это мне нужно плавно скрыть.


хук в ентити рендерер
А он тут причем вообще? Мне нужно понять как именно градиентно установить прозрачность всему блоку. Обычный градиент Цвет<>Пустота я то могу сделать, а вот чтобы это был не просто цвет а изображение, да еще и чтобы там текст был, посложнее задачка.
 
1,075
22
129
в шейдер передать юниформы разрешения экрана, и простейшим gl_FragColor сетнуть альфу alphaValue/xSize
 
355
2
17
Это уже звучит интереснее, но как я и говорил, в шейдерах я достаточно далек.
Не подскажешь как приблизительно это должно выглядеть?
 
1,075
22
129
тутор по чернобелому шейдеру в помощь, там как раз все расписано)
А как сделать то вот:
vec4 newColor = gl_FragColor;
newColor.a /= xSize; //твоя юниформа бтв, сюда можно передать mc.displayWidth или переменную с ScaledResolution
gl_FragColor = newColor;
Но этот код будет менять альфу только в правой части экрана, логично, там дальше додумаешь
 
355
2
17
Поковырял чутка, часть то получается спрятать, но слишком обрубно, не совсем понимаю как шейдером сделать что-то по типу градиент перехода в прозрачность.
 
5,401
179
990
@Sunrise по типу этого
Java:
            tessellator.setColorRGBA_F(0.0f, 0.0f, 0.0f, 0.25f);
            tessellator.addVertex(100, 9.0, 0.0);
            tessellator.addVertex(100, 0.0, 0.0);
            tessellator.setColorRGBA_F(0.0f, 0.0f, 0.0f, 0.0f);
            tessellator.addVertex(50, 0.0, 0.0);
            tessellator.addVertex(50, 9.0, 0.0);
Идея хорошая, но исполнение не верное. Цвет нужно задавать для каждой вершины. Для некоторых вершин значение альфы цвета сделать 0, некоторым 1. Тогда полигон нарисуется с интерполяцией прозрачности между 0 и 1
 
355
2
17
Этот вариант вполне рабочий, создает градиент цвета. Но к сожалению не для моего случая.
 
5,401
179
990
Тебе нужно не текстуру рисовать, а что-то произвольное? Тогда можешь отрисовать что-то в фреймбуфер, а потом нарисовать полигон с этой текстурой
 
355
2
17
У меня несколько идей, где бы я реализовал подобный эффект.
Где-то я бы хотел использовать просто произвольную текстуру, которая плавным градиентом уходила в невидимость, подобный эффект можно видеть в рулетках, когда крутятся блоки и исчезают плавно доходя до края.

Второй элемент, это как-то прятать целый блок таким эффектом. Под блоком я подразумеваю все содержимое между glPush и glPop, там и текстура, и текста, и другие элементы, и вот чтобы этот весь блок затухал с подобным эффектом. Подобное можно реализовать с помощью glScissor, но, там он грубо обрезает видимое содержимое, а я хочу реализовать плавный переход.
 
Сверху