tecnico tecnica sombrear sombreado sombras sombra para niños luz luces imagenes faciles dibujos dibujo dibujar dar con como clases c++ opengl glsl

c++ - tecnica - sombreado dibujo tecnico



Cómo dibujar desde el interior de la geometría de la luz en sombreado diferido (2)

Estoy tratando de implementar un sombreador diferido con OpenGL y GLSL y estoy teniendo problemas con la geometría de la luz. Estos son los pasos que estoy tomando:

Bind multitarget framebuffer Render color, position, normal and depth Unbind framebuffer Enable blend Disable depth testing Render every light Enable depth testing Disable blend Render to screen

Pero como solo estoy renderizando la cara frontal, cuando estoy dentro de una luz, desaparece por completo, haciendo que la cara posterior no funcione, ya que obtendría el doble de potencia de la luz (Y cuando adentro, la mitad [o la cantidad normal]) )

¿Cómo puedo generar el mismo valor de luz desde el interior y el exterior de la geometría de la luz?


bueno en mi caso, lo hago así:

Bind gbuffer framebuffer Render color, position, normal Unbind framebuffer Enable blend Enable depth testing glDepthMask(0); glCullFace(GL_FRONT); //to render only backfaces glDepthFunc(GL_GEQUAL); //to test if light fragment is "behind geometry", or it shouldn''t affect it Bind light framebuffer Blit depth from gbuffer to light framebuffer //so you can depth-test light volumes against geometry Render every light


Si mal no recuerdo, en mi renderizador diferido solo renderizo las caras traseras del volumen de luz. El inconveniente es que no se puede realizar una prueba de profundidad, solo sabrá si hay una luz detrás de una geometría después de realizar el cálculo de la luz y descarte el píxel. Como se explicó en otra respuesta, puede hacer pruebas de profundidad. Pruebe para mayor o igual para ver si la cara posterior está detrás o en una geometría, por lo tanto se cruza con la superficie de la geometría.

De forma alternativa, podría verificar si se encuentra dentro del volumen de luz durante la reproducción y cambiar las caras frontales en consecuencia.