#java #opengl #lwjgl #alpha #slick2d
#java #opengl #lwjgl #альфа #slick2d
Вопрос:
Я прошу прощения за некоторое мое невежество, поскольку я довольно новичок в Slick2D и LWJGL. По сути, я пытаюсь сделать сцену похожей на ночное время, закрыв ее прямоугольником GL_QUADS, который окрашен в синий цвет и является полупрозрачным.
Эта часть достаточно проста. Что я хочу сделать оттуда, так это нарисовать треугольники в этом слое, которые так изменяют альфа-канал. Причина, по которой я хочу это сделать, заключается в том, что я могу имитировать источник света, уменьшая непрозрачность синего прямоугольника по мере приближения к источнику света.
Я нарисовал пример того, каким должен быть ожидаемый результат: зеленый цвет является фоном, синий — ночным эффектом, создаваемым синим прямоугольником, и все более тусклым источником света в центре.
Мне нужно найти способ сделать это с помощью треугольников, потому что я создал алгоритм raycasting, который генерирует результат в виде серии градиентных треугольников.
Прошу прощения, если это плохо объяснено. Я отвечу на любые ваши вопросы.
Вот фрагмент кода, используемый для создания синего прямоугольника:
glColor4f (0.0f,0.0f,1.0f,0.4f);
glBegin(GL_QUADS);
glVertex2f(0,0);
glVertex2f(screenWidth,0);
glVertex2f(screenWidth,screenHeight);
glVertex2f(0,screenHeight);
glEnd();
Я хотел бы написать модифицированную версию следующего кода для настройки альфа-канала этого прямоугольника.
glBegin(GL_TRIANGLES);
setAlphaOfPriorLayer(0.0f);
glVertex2f(x1,y1);
setAlphaOfPriorLayer(0.4f);
glVertex2f(x2,y2);
setAlphaOfPriorLayer(0.4f);
glVertex2f(x3,y3);
glEnd();
Опять же, я использую треугольники для аппроксимации круга и обеспечения правильного радиовещания.
Ответ №1:
Для достижения этой цели использование объекта Frame Buffer очень полезно. FBO позволяет вам по существу отображать текстуру, которая затем может отображаться на экране. В моем конкретном случае я визуализировал элементы в FBO, а затем использовал шейдер при выводе его на экран, чтобы получить желаемую прозрачность.