Настройте яркость/гамму всей сцены в OpenGL.

StackOverflow https://stackoverflow.com/questions/139012

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top