2017-01-05 6 views
0

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

У меня есть код для нормалей куба и понимаю это, но на самом деле не знаю, как сделать преобразование (вычисление) этих нормалей. Я бы хотел, чтобы какое-то направление было направлено отсюда.

//TRIANGLE 1 
    0.0f, -0.774f, 0.49f,  //6 
    0.0f, -1.0f, 0.51f,  //7 
    0.156f, -0.982f, 0.47f,  //8 
+1

Возможный дубликат [Вычисление нормалей в треугольной сетке] (http://stackoverflow.com/questions/6656358/calculating-normals-in-a-triangle-mesh) – BDL

ответ

1

Расчет нормалей может быть выполнен с использованием Vector Cross Product. Вы берете два вектора, и кросс-продукт дает вам нормальный вектор.

Два вектора можно получить, взяв координаты вашего треугольника и вычитая одну вершинную координату из двух других вершин.

То есть:

vec0 = vert2 - vert0

vec1 = vert1 - vert0

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

См. Статью в Википедии о том, как вычислить кросс-продукт. В нижней части раздела вы увидите матрицу, которая показывает, как рассчитать каждый компонент нормального вектора.

+0

Будет ли этот метод работать для вершин, которые являются общими между треугольниками? – alexknob

+0

Я предполагаю, что вы имеете в виду вычисление сглаженных нормалей здесь. Вы делаете одну из двух вещей. Либо вы вычисляете нормали для каждого треугольника индивидуально, и сохраняете все вершины отдельно в буфере геометрии. Если ваша модель имеет общие вершины, это заставляет вас создавать отдельные вершины в одинаковых позициях всегда для каждого треугольника. Альтернативой является то, что вы сначала вычисляете нормаль каждого треугольника отдельно, затем для каждой вершины определяют треугольники, вершина которых является частью, – Bartvbl

+0

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

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

  • Нет связанных вопросов^_^