вычисление нормалей для четырехугольной сетки

У меня есть структура QUAD, в которой хранятся 4 указателя на 4 VECTOR3D (которые содержат 3 числа с плавающей запятой), так что я могу рисовать четырехугольную сетку. Насколько я понимаю, всякий раз, когда я рисую сетку, мне также нужен нормаль, чтобы правильно осветить / затенять сетку, и это относительно просто, когда сетка лежит на плоскости, используя нормаль для каждой грани.

Когда у меня есть квадратные сетки 2 на 2, лежащие на координате XZ, и я пытаюсь поднять его центр (0,0,0) на определенную точку, скажем (0, 4, 0), он начинает формировать настоящие 3D-формы, тогда мне нужно чтобы снова вычислить нормали. Мне сложно понять, как и что должно быть с расчетными нормалями. Как и ожидалось, трехмерная фигура имеет оттенки, как будто это все еще плоская сетка, поэтому она не представляет собой реальную форму. Одно из объяснений гласит, что мне нужно вычислять нормали для каждой вершины, а не для каждой грани. Означает ли это, что мне нужно рассчитать нормали для всех углов меша? что я буду делать, когда у меня появятся нормали? Я все еще использовал старые методы glBegin glEnd, но теперь чувствую, что мне нужно использовать метод DrawArray. Я глубоко сбит с толку и почти уверен, что не издаю много звука, но я был бы очень признателен за вашу помощь.


person user1830954    schedule 22.11.2012    source источник


Ответы (1)


Если вам нужна плоская поверхность, то ваши нормали будут нормалями к плоскости четырехугольника. Если вам нужна "мягкая" поверхность, вам нужно растушевать (прочтите это и посмотрите это классное простое видео) нормальные - это добавит своего рода градиент.

person JAre    schedule 22.11.2012
comment
Итак, если я должен был вычислить нормали вершин, нужно ли мне перебрать все 9 координат (сетка 2x2), вычислить нормальные вершины и сохранить их в отдельном пространстве и использовать glNormalPointer / glvertexPointer и glDrawArrays? - person user1830954; 22.11.2012
comment
Если вы хотите использовать олдскульный api, вы можете установить нормали по-старому. Единственное отличие будет заключаться в том, что нормальное значение смешивается с другими нормальными значениями этой точки (если эта точка есть у других четырехугольников), потому что каждый четырехугольник имеет свою нормаль, и вы хотите смягчить переход между поверхностями. - person JAre; 22.11.2012