Domanda

Qualcuno sa come posso ottenere il seguente effetto in OpenGL:

  • Cambia la luminosità della scena renderizzata
  • O implementando un'impostazione Gamma in OpenGL

Ho provato modificando il parametro ambientale della luce e il tipo di luce (direzionale e omnidirezionale) ma il risultato non è stato uniforme. TIA.

Grazie per l'aiuto, alcune informazioni aggiuntive:   * Non riesco a utilizzare alcuna API specifica di Windows.   * L'impostazione gamma non dovrebbe influire sull'intera finestra in quanto devo avere una gamma diversa per viste diverse.

È stato utile?

Soluzione

Su win32 è possibile utilizzare SetDeviceGammaRamp per regolare la luminosità / gamma complessiva. Tuttavia, ciò influisce sull'intero display, quindi non è una buona idea a meno che l'app non sia a schermo intero.

L'alternativa portatile è quella di rendere l'intera scena più luminosa o più fioca (che è una seccatura), o di schiaffeggiare un quad alfa a schermo intero su tutta la scena per schiarire o scurire come desiderato. Nessuno di questi approcci può influenzare la curva gamma, solo la luminosità complessiva; per regolare la gamma devi catturare l'intera scena in una trama e quindi renderla di nuovo sullo schermo tramite un pixel-shader che esegue ogni texel attraverso una funzione gamma.

Ok, dopo aver letto la domanda aggiornata, quello di cui hai bisogno è un quad con il blending impostato per scurire o schiarire tutto ciò che c'è sotto. Eg.

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();

Altri suggerimenti

http://www.gamedev.net/community/forums /topic.asp?topic_id=435400 potrebbe essere una risposta alla tua domanda, altrimenti potresti probabilmente implementare una correzione gamma come pixel shader

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top