Ajusta el brillo/gamma de toda la escena en OpenGL
3d (2)
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 tu aplicación sea a pantalla completa.
La alternativa portátil es dibujar toda la escena más brillante o más tenue (lo cual es una molestia), o golpear un cuadrángulo de pantalla completa con alfa fusión en toda la escena para iluminar u oscurecerlo como se desee. Ninguno de estos enfoques puede afectar la curva gamma, solo el brillo general; para ajustar la gamma, necesita tomar toda la escena en una textura y luego volver a la pantalla a través de un pixel-shader que ejecuta cada téxel a través de una función gamma.
De acuerdo, habiendo leído la pregunta actualizada, lo que necesitas es un quad con una configuración de mezcla para oscurecer o aclarar todo debajo de él. P.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();
¿Alguien sabe cómo puedo lograr el siguiente efecto en OpenGL:
- Cambiar el brillo de la escena renderizada
- O implementar 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, algo de información adicional: * No puedo usar ninguna API específica de Windows. * La configuración de gamma no debe afectar a toda la ventana, ya que debo tener diferentes gammas para diferentes vistas.
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 un sombreador de píxeles