2013-03-08 20 views
0

modelview 매트릭스 및 gluLookAt의 사용법을 이해하고 있습니다. 즉, gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz)을 선언하면 특정 지점을 직접 볼 수있는 방법을 쉽게 설정할 수 있습니다.gluLookAt 및 MODELVIEW MATRIX

내 질문은 - gluLookAt 이후 postmultiplies gluLookAt을 호출하기 전에 ID를로드한다고 가정하고 현재 matrixmode가 modelview 인 경우 큐브를 그리면 어떻게됩니까?

그래서 이런 식으로 뭔가 : 큐브는 세계에서 렌더링

glMatrixMode(GL_PERSPECTIVE); 
glLoadIdentity(); 
glFrustum(-5, 5, -5, 5, 15, 150); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluLookAt(0, 0, 16, 0, 0, 0, 0, 1, 0); 
glutSolidCube(1.0); 

좌표? 어떤 이유로이 경우 세계 기원에서 렌더링되며 뷰포트에서 볼 수 있습니다. 그러나 그 이유는 무엇입니까? gluLookAt은 뷰 회전과 변환으로 modelview 행렬을 수정해야합니까? 큐브가 본질적으로 카메라로 렌더링되지 않아야합니까?

답변

2

glutSolidCube (1.0)는 세계 원점의 가운데에있는 길이가 1.0 인 정육면체를 그립니다.

그래서 정점은 :

  • (-0.5, -0.5, -0.5)
  • (-0.5, 0.5, -0.5)
  • (-0.5, +0.5, +0.5)
  • (-0.5, -0.5, +0.5)
  • (+0.5 -0.5, -0.5)
  • (+0.5, +0.5, -0.5)
  • (+0.5, +0.5, +0.5)
  • 지금
  • (+0.5 -0.5, +0.5)

하는 gluLookAt (0, 0, 16, 0, 0, 0, 0, 1, 0)를 카메라에 이들 좌표를 변환하는 modeView 행렬을 생성 좌표.

카메라 위치는 기본 카메라 위치 (0,0,0)로 (0,0,16)로 변환되므로이 modelView 매트릭스는 기본적으로 각 꼭지점을 (0,0, -16)으로 변환합니다.

지우기?

+0

세계 좌표계에서 gluLookAt가 카메라에 대한 세계 원점을 변환 한 것처럼 이것을 해석 할 수 있습니까? 귀하의 케이스에 – geogaddi

+0

예. 그러나 일반적으로 그것은 회전 + 번역이 될 수 있습니다. 그래서 gluLookAt는 모델 좌표 (기본적으로 세계 좌표, 즉 원점 (0,0,0)보기 dir (0,0, -1))에서 모델 좌표 (좌표계 (좌표계))를 변환 (회전 + 변환)하는 ModelViewMatrix를 만듭니다. 카메라/눈 즉 캠 위치에서의 원점, 카메라의 방향을 보았을 때) – Dirk

+0

우수! 까다로운 일이지만, 지금은 생각합니다. – geogaddi