2013-08-28 3 views
2

У меня есть список вершин и их расположение в треугольники, а также нормализованные нормальные векторы, зависящие от треугольника.Используйте нормали треугольника в OpenGL, чтобы получить нормали вершин

В идеале, я хотел бы сделать как можно меньше работы, превратив пары (треугольные, нормальные) в пары (вершины, вершины_нормальные), которые я могу вставить в мое VAO. Есть ли способ OpenGL напрямую разобраться с нормалями лица? Или мне нужно отслеживать каждое лицо, в которое вовлечена данная вершина (что более или менее происходит при вычислении буферов индекса), а затем вручную вычислять усредненный нормаль в вершине?

Кроме того, есть ли способ пропустить обычный вычисление по вершинам в целом и просто найти способ проинформировать осколочный шейдер лица-нормальный напрямую?

Edit: Я использую то, что должно быть портативным ES устройств, поэтому фиксированная функция материал является непригодным для использования

+2

Вы спрашиваете, как вычислить нормальные вершины в шейдере или как использовать нормали лица для треугольников без дублирования данных позиции? –

+0

Ну, у меня в настоящее время есть куча нормалей лица, и я бы предпочел не вычислять нормали вершин на ЦП, если я могу помочь. Кроме того, поскольку у меня есть нормали лица (и я не делаю нормального отображения), интерполирование нормалей вершин, чтобы найти нормали фрагмента, кажется пустой тратой. – nimish

+1

"* Я бы предпочел не вычислять нормали вершин на ЦП, если я могу помочь. *« Почему бы и нет? Они не меняются, если позиции не меняются. ЦП - лучшее место для расчета статических данных. Кроме того, неясно, хотите ли вы использовать нормали на лицевые вершины на вершинах или если вы хотите вычислить * реальные * вершинные нормали для создания гладкой поверхности. Вы затенены или нет? –

ответ

3

Я не обязательно говорить, как к самым последним спецификациям жирных OpenGL, но, конечно, в ES вас «Мне придется делать работу самостоятельно.

Несмотря на то, что нормальная была модальной под старым фиксированным конвейером, как и все остальное, она была прикреплена к каждой вершине. Если вы выбрали модель плоского затенения, тогда GL будет использовать цвет в первой вершине на лице по всему предмету, а не интерполировать его. Невозможно воссоздать это поведение под ES.

Атрибуты на вершину и униформа - в лучшем случае - за каждую партию. В ES нет способа указать свойства треугольника и нет стадии конвейера рендеринга, где у вас есть обзор геометрии, когда вы могли бы распределять их по каждой вершине индивидуально. Каждая вершина обрабатывается отдельно, изменения интерполяции, а затем каждый фрагмент обрабатывается отдельно.

Смежные вопросы