Отрегулируйте яркость / гамму всей сцены в OpenGL - PullRequest
3 голосов
/ 26 сентября 2008

Кто-нибудь знает, как мне добиться следующего эффекта в OpenGL:

  • Изменить яркость визуализированной сцены
  • Или реализация настройки гаммы в OpenGL

Я пытался изменить параметры освещения и тип освещения (направленный и всенаправленный), но результат был неодинаковым ТИА.

Спасибо за вашу помощь, некоторая дополнительная информация: * Я не могу использовать API для Windows. * Настройка гаммы не должна влиять на все окно, так как у меня должна быть разная гамма для разных видов.

Ответы [ 2 ]

3 голосов
/ 26 сентября 2008

На win32 вы можете использовать SetDeviceGammaRamp для регулировки общей яркости / гаммы. Тем не менее, это влияет на весь экран, поэтому это не очень хорошая идея, если ваше приложение не полноэкранное.

Портативная альтернатива - рисовать всю сцену ярче или диммером (что создает трудности) или шлепать полноэкранный альфа-смешанный квад по всей сцене, чтобы осветлить или затемнить ее по желанию. Ни один из этих подходов не может повлиять на гамма-кривую, только на общую яркость; чтобы настроить гамму, вам нужно захватить всю сцену в текстуру, а затем вернуть ее обратно на экран с помощью пиксельного шейдера, который пропускает каждый тексель с помощью гамма-функции.

Хорошо, прочитав обновленный вопрос, вам нужен квадроцикл со смешиванием, настроенным на затемнение или осветление всего, что находится под ним. Например.

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();
0 голосов
/ 26 сентября 2008

http://www.gamedev.net/community/forums/topic.asp?topic_id=435400 может быть ответом на ваш вопрос, в противном случае вы, возможно, сможете реализовать гамма-коррекцию в виде пиксельного шейдера

...