OpenGL Lighting

Tengo un simple día y noche ciclo por día deshabilitando la iluminación OpenGL y por la noche habilitando la iluminación OpenGL. Cuando activo, todo aparece más oscuro. Mi pregunta es ¿Cómo puedo lograr que en un punto específico haya una luz que solo ilumine su área circundante, por ejemplo:

http://gameimg.dokry.com/opengl/1414275-light_large.png

Donde está la luz es donde quiero ubicar mi luz. Mi aplicación está en 2D.

EDITAR:

Leí más sobre 2D Lighting y pensé en cómo lo haría para tener un QUAD que esté sobre toda la pantalla y tenga una cierta opacidad y luego dibujaré un círculo en un QUAD que sea amarillo y sobrescribirá el quad para que las imágenes que se dibujen detrás no se vean afectadas, como hacer un agujero en él …

Yo usaría un map de luz 2D y lo mezclaría usando GL_DST_COLOR, GL_ZERO y jugando en opacidad.

Si quieres algo más complejo, busca la textura proyectada con un sombreador:

// The vertex shader varying vec4 pos; void main(void){ pos=vec4(gl_Vertex); gl_Position=ftransform(); } // The fragment shader uniform sampler2D inputImage; varying vec4 pos; void main(void){ gl_FragColor=texture2DProj(inputImage,gl_TextureMatrix[0]*pos); } 

Otra solución es usar lightmapping 3D (si las texturas 3D están disponibles en su plataforma), que también es fácil de implementar.

Espero que ayude 🙂

Otra opción es realizar una iluminación por píxel en los sombreadores de píxeles. Si calcula el vector L a la luz (en espacio de pantalla) para cada fragment (y suponiendo que el fragment normal de N es (0,0,1) en el espacio de pantalla), module el color del fragment por alguna f (N, L). Si prefiere un model de sombreado elegante, puede implementar uno.

Esta solución no depende de la resolución de la textura y siempre es uniforme, pero requiere un pase adicional posterior al process o el uso de esta pieza de sombreador para colorear cada object con un punto en él …