opengl 3d gamma

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.