Что такое лицо по часовой стрелке в openGL

При отбраковке вы можете использовать нормали к лицу, чтобы увидеть, указывает ли лицо, направленное в сторону от камеры, с которой вы работаете, если вы будете рисовать треугольник по часовой стрелке или против часовой стрелки.

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

Как я могу это понять?

3 ответа

Решение

Это один треугольник с разных сторон:

по часовой стрелке против часовой стрелки

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

В приведенном выше примере треугольник текстурирован против часовой стрелки

Теперь представьте, что этот треугольник является элементом кости:

ccw текстурированная коробка

Если вы кидаете кубик (или вращаете камеру вокруг него), наш треугольник от 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 просто проверяет (если выбрано включение) новый порядок вершин грани, теперь в соответствии с новой ориентацией (после применения всех преобразований), к показать лицо или нет.

Другие вопросы по тегам