У меня есть треугольная сетка, и я пытаюсь вычислить нормали, поэтому я могу применить их при рисовании сетки. Я использую немедленный режим (вероятно, изменится на вершинные массивы, когда я получу время, чтобы понять, как они работают) и рисование сетки с помощью GL_TRIANGLE_STRIP.Вычисление и применение нормалей к треугольной сетке
У меня возникли проблемы с вычислением нормалей вершин. Точнее, решить, какие соседние вершины использовать в вычислениях, а затем решить, когда установить эти нормали. Рассмотрим это:
1_2
|/| Supposedly a square where the numbers represent the vertex number in a
3 4 triangle strip.
Я знаю, что вы должны вычислить декартово произведение 2 векторов, принадлежащих плоскости, чтобы получить самолет нормально. Таким образом, в этом примере нормаль верхнего треугольника может быть рассчитана путем выполнения (2-1) x (3-1), а вторая - (2-4) x (3-4). Как вы применяете нормали при рисовании полосы треугольника в непосредственном режиме?
Что я делал, это установить первый нормальный режим при установке vtx 1, второй - при установке vtx 4, третий - при установке vtx 5 и т. Д. Это, однако, дает проблемы, так как вы, очевидно, оказываетесь в результате наличия разных нормалей для каждой из вершин треугольника (когда все они должны быть одинаковыми). Например, треугольник | 2,3,4 | будет иметь только вершину 4 с правильной нормой (так как для вершин 2 и 3 нормаль будет одним из первого треугольника).
Итак, как это сделать? Есть ли способ, или мне нужно изменить на GL_TRIANGLES
? (На данный момент я не хочу останавливать использование немедленного режима, поскольку у меня нет времени).
Это правильно для интерполированного затенения вершин. Если вы хотите иметь плоское затенение, вам нужно будет дублировать общие вершины, чтобы каждый набор точек на лице имел уникальные нормали, а не средние. – 2010-11-30 19:18:42