2013-12-09 13 views
1

OpenGL ES 1.1이 두 가지 방식으로 작동한다는 것을 알았습니다. 여기에 쿼드에 대한 예입니다시계 반대 방향으로 정점을 만들어야하는 이유는 무엇입니까?

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

다른 방향 : glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

어떤 사람들은 렌더링

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

당신이 반 시계 방향으로 정점을 만들어야합니다 말한다. 왜?

+0

아마도 유일한 이유는 수동으로 권선/법선을 계산해야한다면 오른손 사람이 왼손을 가이드로 사용할 수 있다는 것입니다. (Pun accidental) –

답변

1

OpenGL (및 그 친척 -ES, WebGL 등)에는 "얼굴 도려 내기"기능이 있습니다. 얼굴의 앞이나 뒤가 보이면 감기 방향이 결정됩니다. 면 제거를 사용하면 앞면 또는 뒷면의 렌더링을 생략 할 수 있습니다.

기본적으로 OpenGL은 (오른 손잡이 법선 벡터 계산과 일치하여) 앞면에 CCW (counter clock wise) 와인딩을 가정합니다. 그것은 비록 바뀔 수 있습니다.

+0

'gl.frontFace (gl.CW);'또는'gl.frontFace (gl.CCW);' –

+0

@GavinSimpson : PyOpenGL을 사용하는 Python에서만. OpenGL 스펙에서 그것은 단지'FrontFace (CW)'와'CCW'이고 C 코드에서는 모든 것이'gl ...'과'GL_ ...'로 시작됩니다. – datenwolf

+0

나는이 컬럼을 앱에서 필요로했습니다. gl_cw. 전체 C++ 앱보다 권선을 전환하는 것이 쉬웠습니다. 여기에 올린 코드는 webgl에서 훌륭하게 작동하지만 괜찮은 문서가 없기 때문에 '쉬운'자료를 찾기 위해 약간 어려움을 겪고 있습니다. 그렇기 때문에 게시 할 때까지 .... 괜찮은 책을 찾을 때까지 또는 링크입니다. –