Вычисление и применение нормалей к треугольной сетке - PullRequest
3 голосов
/ 30 ноября 2010

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

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

 1_2
 |/|    Supposedly a square where the numbers represent the vertex number in a            
 3 4    triangle strip.

Я знаю, что вам нужно вычислить перекрестное произведение двух векторов, принадлежащих плоскости, чтобы получить плоскость, нормальную.Таким образом, в этом примере нормаль верхнего треугольника можно вычислить, выполнив (2-1) x (3-1), а второй - (2-4) x (3-4).Как вы тогда применяете нормали при рисовании треугольной полосы в непосредственном режиме?

То, что я делал, это устанавливал первый нормальный, когда установлен vtx 1, второй, когда установлен vtx 4, третий, когда установлен vtx 5, и т. Д. Это, однако, вызывает проблемы, поскольку вы, очевидно, в конечном итогеразные нормали для каждой из вершин треугольника (когда все они должны быть одинаковыми).Например, треугольник | 2,3,4 |будет иметь только вершину 4 с правильной нормалью (так как для вершин 2 и 3 нормаль будет первой вершины треугольника).

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

1 Ответ

2 голосов
/ 30 ноября 2010

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

...