Вопрос

Ответ на мой вопрос предполагает, что освещение DOT3 может помочь с рендерингом OpenGL ES, но у меня возникли проблемы с поиском достойного определения того, что такое освещение DOT3.

Правка 1

Мы очень ценим информацию, связанную с iPhone.

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

Решение

Освещение DOT3 часто называют попиксельным освещением.При вершинном освещении освещение рассчитывается для каждой вершины, а полученное освещение интерполируется по треугольнику.При попиксельном освещении, как следует из названия, цель состоит в расчете освещения для каждого пикселя.

То, как это делается на оборудовании с фиксированными функциями, например iPhone, с так называемыми объединителями регистров.Название DOT3 происходит от этого состояния рендеринга:

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);

Посмотри на этот запись в блоге Вольфганга Энгельса для получения дополнительной информации о том, как именно это настроить.

При попиксельном освещении также популярно использовать так называемый нормальная карта.Это означает, что нормаль каждой точки объекта хранится в специальной карте текстуры — карте нормалей.Это было популяризировано в игре DOOM 3 с помощью программного обеспечения ID, где использовались довольно низкополигональные модели, но с картами нормалей высокого разрешения.Причина использования этого метода заключается в том, что глаз более чувствителен к изменению освещения, чем к изменению формы.

В вашем другом вопросе я увидел, что причина, по которой это возникло, заключалась в том, что вы хотели уменьшить объем памяти, занимаемый данными вершин.Это действительно так: вместо того, чтобы хранить три компонента для нормали в каждой вершине, вам нужно хранить только два компонента для координат текстуры в карте нормалей.Однако включение попиксельного освещения приведет к снижению производительности, поэтому я не уверен, будет ли это чистой победой, поскольку обычно советую попробовать и посмотреть.

Наконец, интенсивность рассеянного освещения в точке пропорциональна косинусу угла между нормалью к поверхности и направлением света.Для двух векторов скалярное произведение является определенный как:

a dot b = |a||b| cos(theta)

где |a| и |b| длина векторов a и b соответственно и theta это угол между ними.Если длина равна единице, |a| и |b| называются единичными векторами, и формула упрощается до:

a dot b = cos(theta)

это означает, что интенсивность рассеянного освещения определяется скалярным произведением нормали к поверхности и направления света.Это значит, что все Рассеянное освещение — это разновидность DOT3-освещения, даже если название стало относиться к попиксельному типу освещения.

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

От здесь:

Bumpmapping - это наложение текстуры на модель, где яркость каждого текселя определяет высоту этого текселя.

Высота каждого текселя затем используется для изменения освещения по всей поверхности.

Нормальное отображение - это нанесение текстуры на модель, где цвет каждого текселя на самом деле равен трем значениям, которые определяют направление расположения точек поверхности.

Цвет (255, 0, 0), например, может означать, что поверхность в этом месте направлена вниз по положительной оси X.

Другими словами, каждый тексель является нормальным.

Название Dot3 происходит от того, что вы на самом деле делаете с этими нормалями.

Допустим, у вас есть вектор, который указывает в направлении, указанном вашим источником света.И давайте предположим, что у вас есть вектор, который является нормалью к определенному текселю в вашей модели, который сообщает вам, в каком направлении указывает этот тексель.

Если вы выполните простое математическое уравнение, называемое "точечным произведением" на эти два нормальных вектора, например:

Точка = N1xN2x + N1yN2y + N1z*N2z

Тогда результирующее значение представляет собой число, которое показывает вам, насколько эти два вектора указывают в одном направлении.

Если значение равно -1, то они указывают в противоположных направлениях, что фактически означает, что тексель направлен на источник света, а источник света направлен на тексель, поэтому тексель должен гореть.

Если значение равно 1, то они указывают в одном направлении, что означает, что тексель направлен в сторону от источника света.

И если значение равно 0, то один из векторов направлен под углом 90 градусов относительно другого.Т. е.:Если вы стоите на земле и смотрите вперед, то ваш вектор обзора равен 90 градусам относительно нормали к земле, которая направлена вверх.

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