Я пишу программу GLSL как часть плагина, который запускается внутри майя, трехмерного приложения с закрытым исходным кодом. Мой плагин отображает пользовательскую геометрию в тот же буфер изображений, что и приложение, которое делает его полигональной геометрией по умолчанию. Приложение использует фиксированный конвейер OpenGL для его освещения и затенения, но я использую GLSL для визуализации собственной геометрии и материалов.GLSL gl_LightSource Точечная/направленная/точечная дифференциация
Моя проблема заключается в том, что я хочу подражать поведению фиксированных огней трубопровода в моем шейдере. Приложение определяет огни в форме gl_LightSource
, и я хочу, чтобы они имели одинаковое направление, интенсивность и т. Д., Когда они были назначены моей настраиваемой геометрии, которые они имеют при назначении для полигональной геометрии по умолчанию.
Поля, обозначенные как gl_LightSource
, четко документированы, но я не могу найти окончательную документацию о том, как фиксированный конвейер интерпретирует эти поля. Существует много примеров того, как кодировать точки/направленные/точечные огни в GLSL, но они, похоже, точно не имитируют фиксированный конвейер. Например, как вы определяете, является ли свет точным, направленным или точечным, если приложение определяет их сочетание? Можно ли обрабатывать смесь типов света без введения чрезмерного разветвления в моем шейдере?
Короче говоря, существует ли какая-либо окончательная документация или пример того, как оценивается конвейер фиксированной функции gl_LightSource
?
Спасибо за ссылку. Я отредактировал свой вопрос и удалил ссылку на фрагмент, я знаю, но не заинтересован в этой разнице. Если бы я мог избежать фиксированного конвейера, я бы, но я работаю в закрытом исходном приложении, так что мои руки связаны. – atb