Pregunta

¿Alguien sabe cómo puedo lograr el siguiente efecto en OpenGL:

  • Cambiar el brillo de la escena renderizada
  • O implementando una configuración Gamma en OpenGL

Lo he intentado cambiando el parámetro ambiental de la luz y el tipo de luz (direccional y omnidireccional) pero el resultado no fue uniforme. TIA.

Gracias por su ayuda, alguna información adicional:   * No puedo usar ninguna API específica de Windows.   * La configuración de gamma no debería afectar a toda la ventana, ya que debo tener diferentes gamma para diferentes vistas.

¿Fue útil?

Solución

En win32 puede usar SetDeviceGammaRamp para ajustar el brillo / gamma general. Sin embargo, esto afecta a toda la pantalla, por lo que no es una buena idea a menos que su aplicación sea de pantalla completa.

La alternativa portátil es dibujar la escena completa más brillante o más tenue (lo cual es una molestia), o abofetear un cuadrante de pantalla alfa en toda la escena para aclararlo u oscurecerlo como se desee. Ninguno de estos enfoques puede afectar la curva gamma, solo el brillo general; para ajustar el gamma que necesita, tome la escena completa en una textura y luego vuelva a mostrarla en la pantalla a través de un sombreador de píxeles que ejecuta cada texel a través de una función gamma.

Ok, después de leer la pregunta actualizada, lo que necesita es un quad con una mezcla configurada para oscurecer o iluminar todo lo que hay debajo. Ej.

if( brightness > 1 )
{
    glBlendFunc( GL_DEST_COLOR, GL_ONE );
    glColor3f( brightness-1, brightness-1, brightness-1 );
}
else
{
    glBlendFunc( GL_ZERO, GL_SRC_COLOR );
    glColor3f( brightness, brightness, brightness );
}
glEnable( GL_BLEND );

draw_quad();

Otros consejos

http://www.gamedev.net/community/forums /topic.asp?topic_id=435400 podría ser una respuesta a su pregunta; de lo contrario, probablemente podría implementar una corrección gamma como sombreador de píxeles

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top