Доброе утро/день/вечер уважаемые игроделы/программисты/посетившие этот сайт!
Изучая OpenGL, я наконец дошел до света и шейдеров
Вообщем проблема такая: У меня есть сцена, на ней вращающаяся текстурированная сфера, затекстуренный параллелограмм и комната без текстуры (сложенная из таких же параллелограммов ЭТО ВАЖНО!)
Для наглядности скрин:
Источник света у меня GL_LIGHT0 (код стандартный, показывать не вижу смысла). Источник света точечный, затухание дефолтное.
* В пикселных шейдерах lightMask нужен для того, чтобы осветлить изображение, так как при ambient и diffuse на максимальный цвет, изображение все равно слишком темное.
В предоставленном примере глобальное фоновое освещение (0.125, 0.125, 0.125, 1), ambient источника (0.25, 0.25, 0.25, 1), диффюз (1, 1, 1, 1). Диффузный цвет материала - цвет объекта, ambient материала - произведение цвета объекта на глобальное фоновое освещение.
Для сферы и для куба (будем называть его так) все работает, как видите, прекрасно. Источник света расположен под сферой.
По логике вещей, "пол" комнаты должен освещаться сильнее, чем "потолок". Однако, все наоборот. "Пол" вообще не освещен, освещается только потолок. Не подскажите, в чем проблема?
Пы.Сы.: если кому не лень, не можете ли вы подсказать код шейдера, который позволяет делать освещение части полигона? У меня так: если на угол полигона светит источник света, то освещается весь полигон, не смотря на его размеры. А хочется, чтобы освещалась только та часть полигона, над которой свет.
Пы.Пы.Сы.: за полезный ответ с меня 3 месяца плюсов
Пы.Пы.Пы.Сы.: OpenGL 2.0, рисую треугольниками, ВСЕ нормали установлены правильно.
Сообщение отредактировал MrAkakuy - Четверг, 13 Июня 2013, 17:48
Пы.Сы.: если кому не лень, не можете ли вы подсказать код шейдера, который позволяет делать освещение части полигона? У меня так: если на угол полигона светит источник света, то освещается весь полигон, не смотря на его размеры. А хочется, чтобы освещалась только та часть полигона, над которой свет.
Это потому, что освещение допотопное повертексное... Еще и на шейдерах, сильно однако. Гугли "glsl phong" C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Нормали абсолютно нормальные, обращены вовнутрь? По идее, тогда должно работать все правильно
Цитата (MrAkakuy)
Пы.Сы.: если кому не лень, не можете ли вы подсказать код шейдера, который позволяет делать освещение части полигона? У меня так: если на угол полигона светит источник света, то освещается весь полигон, не смотря на его размеры. А хочется, чтобы освещалась только та часть полигона, над которой свет.
Гугли Specular lighting. Код предоставить не могу, т.к. работал только с дирек икс, вот по директу статья, вряд ли пригодится, но вот: http://rastertek.com/dx11tut10.html
На шейдерах, потому что не нравится мне как просчитывает свет OpenGL, да и потому что меня напрягает ограничение в 8 источников света и я планировал полностью перебраться на шейдерное освещение, а оттуда уже на OpenGL 3.3
Цитата (Izaron)
Гугли Specular lighting
Пробовал такое, не получилось. Руки ведь кривые. Все равно спасибо за ответ.