Вычисление нормалей вершин

Я искал в Google много часов без хорошо объясненного ответа, я работаю с освещением, и мне нужны нормали вершин, предположим, у нас есть этот буфер вершин (это куб):

static const GLfloat g_vertex_buffer_data[] = {
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f
};

Итак, как я могу вычислить нормали вершин?
Это все. Спасибо

4

Решение

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

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

7

Другие решения

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

Это Lighthouse3D учебник объясняет математику за нормалями вершин, как это делает Слайд 22 этой лекции USC.

3

По вопросам рекламы [email protected]