2011-12-01 2 views
1

이 모드가 무엇을하는지 이해하지 못합니다.OpenGL MatrixMode

설정되어 있습니다. glMatrixMode (GL_MODELVIEW);

꼭지점을 그리기 전에 실제로 그 의미는 무엇입니까? 뭐하는거야?

답변

4

OpenGL에는 두 가지 기본 매트릭스 모드가 있습니다 (다른 두 가지 모드가 있지만 걱정할 필요는 없습니다). GL_MODELVIEWGL_PROJECTION입니다. 함께 OpenGL은 당신이 가져다주는 비주얼에 넣는 정점을 어떻게 변환하는지에 대한 많은 부분을 정의합니다. glMatrixMode(GL_MODELVIEW)을 가장 최근에 호출 한 경우 포인트가 공간에서 어떻게 이동 할지를 변경하면 모든 포인트가 glTranslatef으로 번역되고 glRotatef과 같이 회전 될 수 있습니다. glMatrixMode(GL_PROJECTION)을 호출하면 점이 화면에 어떻게 투영되는지가 변경됩니다. 이것은 gluPerspective 또는 glOrtho과 같은 것을 호출하기를 원하는 모드입니다.

각 주요 드로잉 단계 (메인 장면, GUI 등)가 프로젝션 매트릭스를 설정하기 전에 프로젝션 모드로 전환 한 다음 다음 뷰까지 모델 뷰로 전환하는 것이 일반적입니다. 이렇게하면 카메라를 움직이거나 객체의 위치를 ​​변경하여 장면의 변형을 변경하는 동안 투영을 변경하지 않고 그대로 둘 수 있습니다.

+0

실제로 각 프레임 반복의 시작 부분에 투영을 설정하는 것이 좋습니다. . HUD, 미니 맵 또는 다른 예상을 필요로하는 다른 요소를 그리는 경우 어쨌든 그렇게 할 것입니다. – datenwolf

+0

물론입니다. 내 설명은 단순한 단일 장면, 프릴이 붙어 있지 않은 프로그램을 가정하고 있었고 그에 따라 내 대답을 조정할 것입니다. – nonVirtualThunk

2

glMatrixMode()를 호출하면 뒤 따르는 변환을위한 행렬을 설정합니다. 이들 매트릭스를 분리하여

평소 그래서 행렬 변경 후 glOrtho/glFrustum 호출하고 GL_MODELVIEW 포지셔닝 및 glRotate/glTranslate을 물체 회전 (투영 변환을 저장 GL_PROJECTION 매트릭스를 사용할 것이다

.

수행 할 수 있습니다 항상 모델 뷰 행렬을 제로 다시 투영 행렬을 계산하지 않아도됩니다 - 모든 개체를 표시하는 동안 일반적으로 두 번째는 일정하게 유지됩니다

예 :.

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); //now we zero only the projection matrix 
glOrtho(0,width,0,height,-1,1); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

// now you can use glTranslate and glRotate for positioning objects 
// and then call glLoadIdentity() again to return to origin, still preserving your projection 

나는 또한이 주제를 완전히 다루기 때문에 The Red Book이나 opengl.org의 자습서를 볼 것입니다.