2013-12-09 8 views
1

Я обнаружил, что OpenGL ES 1.1 работает в обоих направлениях. Вот пример четырехугольника:Почему я должен создавать вершины против часовой стрелки, а не по часовой стрелке?

GLfloat verts[] = { 
    0, height,  // left bottom 
    width, height, // right bottom 
    0, 0,   // left top 
    width, 0  // right top 
}; 

Другое направление:

GLfloat verts[] = { 
    0, height, 
    0, 0, 
    width, height, 
    width, 0 
}; 

визуализации с glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

Некоторые люди говорят, что вы должны создать вершины в порядке обхода против часовой стрелки. Зачем?

+0

Вероятно, единственная причина заключается в том, что нужно вычислить обмотки/нормали _manually_, тогда правая рука может использовать свою левую руку в качестве руководства. (Pun случайно) –

ответ

1

OpenGL (и его родственники -ES, WebGL и т. Д.) Имеют функцию «отбрасывание лица», где направление намотки определяется, если вид спереди или сзади лица. Используя отбрасывание лица, вы можете опустить визуализацию лицевой или задней поверхности.

По умолчанию OpenGL предполагает противотуманную (CCW) обмотку для лицевых поверхностей (в соответствии с нормальным векторным расчетом правой руки). Это может быть изменено.

+0

'gl.frontFace (gl.CW);' или 'gl.frontFace (gl.CCW);' –

+0

@GavinSimpson: только в Python с использованием PyOpenGL. В спецификациях OpenGL это просто «FrontFace (CW)» и «CCW», а в коде C все префикс «gl ...» и «GL_ ...» – datenwolf

+0

Мне нужно было это в приложении, которое я написал несколько лет назад, он экспортирует в gl_cw. Было проще переключить намотку здесь, чем на все приложение C++. Код, который я разместил здесь, отлично работает в webgl, но с отсутствием достойной документации я немного борюсь, чтобы найти «легкий» материал, поэтому, хотя я бы опубликовал его ... пока не найду достойную книгу или это ссылка. –