Я делаю 2D-игру с боковым скроллером, и сейчас я использую свет. Огни — это просто текстура градиента света, визуализируемая поверх местности, умноженная, чтобы сделать ее более яркой. Тем не менее, я не знаю, как или понять, как сделать окружающее освещение. Следующая картинка подводит итог того, что у меня есть, а нижняя часть — это то, что я хочу.
Я открыт для ответов относительно шейдеров, потому что я знаю, как их использовать.
Я закончил тем, что создал текстуру FBO размером с экран, очистил ее от цвета окружения и нарисовал все источники света. Затем я пропустил его через созданный мной шейдер, который принимает 2 текстуры для униформы. Текстура для рисования и сам свет FBO. Шейдер умножает текстуры, нарисованные с помощью FBO, и получилось хорошо.
ambience.frag
uniform sampler2D texture1;
uniform sampler2D texture2;
varying vec2 texCoord;
void main( void ) {
vec4 color1 = vec4(texture2D(texture1, gl_TexCoord[0].st));
vec4 color2 = vec4(texture2D(texture2, texCoord));
gl_FragColor = color1*vec4(color2.r,color2.g,color2.b,1.0);
}
ambience.vs
varying vec2 texCoord;
uniform vec2 screen;
uniform vec2 camera;
void main(){
gl_Position = ftransform();
gl_TexCoord[0] = gl_MultiTexCoord0;
vec2 temp = vec2(gl_Vertex.x,gl_Vertex.y)-camera;
texCoord = temp/screen;
}
Других решений пока нет …