2010-07-10 3 views
4

В настоящее время я работаю с OpenGL ES 1.1 и использует соглашение DrawElements вместе с вершинными, нормальными, текстурными координатами и массивами индексов.Нормальные карты против нормальных координат

Недавно я наткнулся на это время исследовал идею использования отображения Normal/Bump, который я раньше, хотя невозможно с OpenGL ES: http://iphone-3d-programming.labs.oreilly.com/ch08.html

я могу генерировать объект-Apace нормальную карту уже с моей 3D моделер, но то, что я не совсем понимаю, - это то, будет ли массив нормальных координат понадобиться больше, если будет реализован второй блок текстур для нормального отображения или будет Освещен + Цветная текстура, объединенная с нормальной картой с помощью опции DOT3_RGB, - это все, что обязательный?

EDIT - После исследования DOT3 Lighting немного дальше, я не уверен, правильно ли ответ, заданный ognian. Эта страница, http://www.3dkingdoms.com/tutorial.htm дает пример ее использования, и если вы посмотрите на фрагмент кода «Rendering Final Result», нет нормального массива. ClientState для обычных массивов никогда не включается.

Я также нашел этот пост здесь, What is DOT3 lighting?, который объясняет это хорошо ... но приводит меня к другому вопросу. В комментариях говорится, что вместо перевода нормалей вы переводите направление света. Я смущен этим, как если бы у меня была игра со стационарной стеной ... зачем мне перемещать свет только для одной модели? Надеясь, что кто-то может дать хорошее объяснение всему этому ...

ответ

1

Принимая во внимание, что нормальные карты касательного пространства пертурбуалируют нормали, которые интерполируются из нормалей на вершинах, нормальные карты объекта-пространства уже содержат всю необходимую информацию о поверхностной ориентации на карте. Поэтому, если вы просто используете освещение DOT3 в OpenGL ES 1.1, вам не нужно снова передавать нормали.

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

+0

С помощью светового вектора мы говорим только о массиве light0position в glLightfv (GL_LIGHT0, GL_POSITION, light0position)? Если я вручную преобразую его, чтобы исправить освещение на одном объекте ... я не полностью загрязняю, как свет бьет все остальное? Как сделать, чтобы преобразовать его, а затем применить его только к изменению цвета только к объекту? Спасибо за солидный ответ, Pivot, кстати. – Maximus

+0

Если вы выполняете нормальное отображение объектного пространства, как в разделе «Обычное сопоставление с OpenGL ES 1.1» первой ссылки, которую вы опубликовали, вы вообще не используете обычное освещение OpenGL ES 1.1. На этом этапе вы хотите передать свой вектор света (в пространстве объектов) в качестве цвета вершины, чтобы вы могли использовать его для DOT3. Вы можете часто получать достаточно приличное приближение, используя один и тот же цвет для всех вершин (вектор света объекта-объекта в центр вашего объекта). – Pivot

+0

Хорошо, все как-то начинает иметь смысл ... только едва. Все, что вызвало это, состояло в том, что я использовал регулярное освещение и считал, что нормальное отображение чего-то, что нельзя было бы сделать с OpenGL ES. Когда я узнал, что это возможно, я пытался выяснить, как это работает. Итак ... прежде чем я пойду дальше ... это хорошая идея? Возможно, это быстрее, чем обычное освещение OpenGL ES 1.1? – Maximus

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