Что такое лицо по часовой стрелке в openGL
При отбраковке вы можете использовать нормали к лицу, чтобы увидеть, указывает ли лицо, направленное в сторону от камеры, с которой вы работаете, если вы будете рисовать треугольник по часовой стрелке или против часовой стрелки.
Я запутался в этой технике по часовой стрелке. Похоже, что при использовании этого метода порядок данных вершин, отправляемых на видеокарту, определяет, будет ли она обращена к камере или от нее. Я не понимаю, как это имеет смысл, потому что камера может смотреть в любом направлении, это как если бы данные вершин должны были изменяться в зависимости от положения камеры, а это явно не делается на CPU.
Как я могу это понять?
3 ответа
Это один треугольник с разных сторон:
3 точки в трехмерном пространстве определяют треугольник. Кроме того, если эти точки упорядочены (как здесь), они также определяют две стороны (грани) треугольника: по часовой стрелке и против часовой стрелки (они определяются порядком часов, помещенных внутрь грани, будут указывать его вершины)
В приведенном выше примере треугольник текстурирован против часовой стрелки
Теперь представьте, что этот треугольник является элементом кости:
Если вы кидаете кубик (или вращаете камеру вокруг него), наш треугольник от CCW становится CW, и мы больше не хотим, чтобы он был текстурирован.
Эта игральная кость на самом деле будет построена из 12 таких треугольников, и если мы упорядочим их должным образом, мы будем текстурировать только 6, обращенных к камере одновременно.
Я покажу вам это на примере Quad:
(0,0)-------(1,0)
| |
| X |
| |
(0,1)-------(1,1)
Давайте предположим, что мы начинаем с (0,0)
, Теперь, если вы свернете (пройдете) вершины в порядке "по часовой стрелке", следующие будут (1,0)
, (1,1)
а также (0,1)
, (1,0)
лежит более или менее на 2 часа, (1,1)
4 и так далее.
Таким образом данные в памяти GPU: 0,0, 1,0, 1,1, 0,1
,
Когда вы коррелируете направление намотки с вашими настройками, вы можете легко различить "спереди" и "назад" - чтобы представить, что лучше, вы можете нарисовать его на чем-то прозрачном, а затем посмотреть с другой стороны - направление намотки будет наоборот.
Таким образом, указание направления намотки просто указывает графическому процессору, какая сторона впереди, а какая сзади, поскольку он не может сделать это сам по себе - обе стороны треугольника одинаково хороши, и вектор нормали данного многоугольника может либо быть N
или же -N
, Тем не менее, GPU может проверить, какой из них выровнен с правильным порядком завершения.
В главе 2 (старой) Красной книги есть несколько хороших объяснений, касающихся специфических для OpenGL вещей, которые до сих пор довольно актуальны.
В том-то и дело: порядок вершин изначально не связан с ориентацией камеры, когда вы создаете / рисуете лицо! Обратите внимание, что камера - это просто преобразование, а не что-то само по себе распознаваемое openGL.
Итак, при рендеринге, после того как вы "проследили" через камеру, openGL просто проверяет (если выбрано включение) новый порядок вершин грани, теперь в соответствии с новой ориентацией (после применения всех преобразований), к показать лицо или нет.