Pergunta

Alguém sabe como eu posso conseguir o seguinte efeito em OpenGL:

  • Alterar o brilho da cena renderizada
  • ou implementar uma definição Gama em OpenGL

Eu tentei alterando o parâmetro ambiente da luz e do tipo de luz (direcional e omnidirecional), mas o resultado não foi uniforme. TIA.

Obrigado por sua ajuda, algumas informações adicionais: * Eu não pode usar quaisquer janelas especificas API. * A definição de gama não deve afetar toda a janela como eu deve ter gamma diferente para diferentes pontos de vista.

Foi útil?

Solução

No win32 você pode usar SetDeviceGammaRamp para ajustar o brilho / gama total. No entanto, isso afeta todo o visor, então não é uma boa idéia a menos que seu aplicativo é fullscreen.

A alternativa portátil, quer seja para tirar toda a cena mais brilhante ou mais escuro (que é um aborrecimento), ou tapa um quad alfa-misturado tela cheia ao longo de toda a cena a iluminar ou escurecer-lo como desejado. Nenhuma destas abordagens podem afectar a gama-curva, apenas o brilho geral; para ajustar o gamma você precisa agarrar a cena inteira em uma textura e, em seguida, torná-lo de volta para a tela através de um pixel-shader que executa cada texel através de uma função gama.

Ok, depois de ler a pergunta atualizado, o que você precisa é um quad com loteamento criado para escurecer ou tudo ilumina debaixo dela. Por exemplo.

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

Outras dicas

http://www.gamedev.net/community/forums /topic.asp?topic_id=435400 pode ser uma resposta à sua pergunta de outra forma você provavelmente poderia implementar uma correção de gama como um pixel shader

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top