Как рассчитать нормали вершин цилиндра? - PullRequest
0 голосов
/ 02 марта 2012

У меня есть следующий цилиндр, я рисую червя в opengl и хочу вычислить нормали вершин.

enter image description here

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Для каждой точки на кольце цилиндра, vertexNormal = normalize(vertexPosition - ringCenter);

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

2 голосов
/ 02 марта 2012

Рассчитайте нормали для каждого лица (треугольника) и сохраните его где-нибудь. Теперь для каждой вершины у вас есть несколько граней, которые разделяют вершину (типично 6 на вашей картинке). Ваша последняя нормаль вершины - это среднее от нормалей граней. Для 6 лиц вы рассчитываете:

int faceCount = 6;
float sum = 0.0f;
for(int face = 0; face < faceCount; ++face)
    sum += faceNormals[face].x;
normal.x = sum / faceCount;
// and so on for y and z

Не забудьте нормализовать результирующий вектор, чтобы его длина равнялась 1.

ПРИМЕЧАНИЕ. Не помещайте faceNormals в такой массив. В реальном коде вы, вероятно, захотите иметь один vector -подобный контейнер со всеми нормалями и некоторую логику, говорящую о том, какие нормали актуальны для какой вершины.

...