Вершинные нормали для куба - PullRequest
       1

Вершинные нормали для куба

4 голосов
/ 19 февраля 2011

Куб имеет 8 уникальных вершин.Правда ли, что каждая из этих 8 нормалей (единичных векторов) имеет угол 135 градусов к каждому ребру, которое разделяет эту вершину?А вершина нормальная, указывающая наружу / из куба?Ваш ответ должен быть технически правильным.Или это зависит от того, как куб определен (нарисован), например, с использованием треугольных полос или индексов, которые определяют 2 треугольника для каждой стороны куба?Цель нормали вершины - плавное затенение и освещение в приложении OpenGL ES.

Ответы [ 5 ]

12 голосов
/ 19 февраля 2011

Если куб определяется 8 уникальными вершинами, то нормали, вероятно, будут составлять угол 135 градусов к каждому ребру, как вы упомянули.

Однако куб часто определяется с использованием 24 вершин именно по этой причине. Это позволяет вам иметь нормали вершин, перпендикулярные каждой грани, путем «дублирования» вершин в каждом углу. Таким образом, определение куба - это всего лишь определение 6 отдельных граней, каждая из которых направлена ​​наружу соответствующим образом.

4 голосов
/ 19 февраля 2011

Существует точка * в сглаживании куба с 8 вершинами, чтобы он выглядел как сфера. Таким образом, вы получите чрезвычайно уродливую сферу. Единственный разумный способ нарисовать куб - это использовать 24 уникальные вершины.

0 голосов
/ 01 мая 2018

135 градусов можно объяснить визуально вектором нормали каждой вершины, направленной наружу, и он должен иметь одинаковый угол с каждым ребром, частью которого является вершина. Так как внутренний угол составляет 90 градусов, 270 градусов находятся за пределами этого угла. Поэтому 270 градусов / 2 = 135 градусов.

Нормальные векторы каждой вершины используются для вычисления нормального вектора треугольника. Для вашей 3d-модели, представляющей собой набор плоских треугольников, наличие только одной нормали для расчета освещения по ней приведет к плоскому затенению (вы будете физически корректны, если объект действительно будет таким резким). Использование нормалей вершин для интерполяции «нормалей» для каждой точки треугольника дает плавное освещение, собирая гладкую поверхность.

Проблема этого подхода заключается в использовании только одной нормальной нормали на вершину, в результате куб получает затенение, похожее на сферу, в то же время оставаясь кубом.

Это в основном причина того, почему нужно определить куб с 24 (= 6x4) вершинами, а не 6. Таким образом, можно иметь куб со всеми гранями (и, следовательно, каждым из двух его треугольников), чтобы они были правильными (плоскими ) нормальные.

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

Обычно никто не хочет плавно затенять крутой угол, например 90 (270) градусов. Обычная интерполяция используется только для имитации «органических» / «гладких» поверхностей. Поскольку эти органические / гладкие поверхности являются нормой (подумайте о чайнике или трехмерной фигуре), было принято решение сохранить нормали вершин с координатами положения и ультрафиолета, поскольку это норма для большинства «непрерывных» трехмерных поверхностей. , Обычно вы добавляете больше треугольников для представления гладкой топологии в модели. Поэтому наличие нормалей вершин является компромиссом для минимизации объема информации для средней модели.

Модель куба со всеми плоскими треугольниками, следовательно, является наихудшим случаем. Вот почему каждому углу куба нужны три нормали вершин, по одной для каждой грани, у которых это вершина.

PS: сегодня эти «гладкие» поверхности дополнительно определяются с помощью карт нормалей, выпекаемых из модели более высокого разрешения. Используя карты нормалей, каждая точка на грани получает свой собственный вектор нормалей (или вектор нормалей каждой точки можно интерполировать из выборок векторов нормалей, предоставленных сопоставленной картой нормалей).

0 голосов
/ 23 июля 2011

Ориентированные по центру нормали восьми угловых вершин куба фактически образуют угол 125 градусов по 16 минут с каждым соединенным ребром.

В другом месте на SO есть хорошее обсуждение.

0 голосов
/ 19 февраля 2011

Что означает «вершина нормальная»?

Я понимаю, что означает вектор нормали для каждой из граней.

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

Так означает ли «нормаль вершины» среднее значение нормали общих лиц для вас?* Трехлинейный куб будет иметь линейные ребра и плоские стороны, но это только один способ определить трехмерную фигуру.Вы можете использовать полиномы высшего порядка в качестве функций формы;это усложнит вашу жизнь.Ваша графическая библиотека допускает что-либо подобное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...