2010-05-03 2 views
2

카메라로 위치 벡터와 오일러 각 피치와 요 (x와 y 회전)로 구성된 FPS 스타일 카메라를 구현했습니다. 투영 행렬을 설정 한 후, 그때 카메라 위치의 역으로 ​​변환 한 후, 회전하여 카메라의 좌표로 변환 :위치와 오일러 각에서 lookat 벡터를 계산합니다.

// Load projection matrix 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

// Set perspective 
gluPerspective(m_fFOV, m_fWidth/m_fHeight, m_fNear, m_fFar); 

// Load modelview matrix 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

// Position camera 
glRotatef(m_fRotateX, 1.0, 0.0, 0.0); 
glRotatef(m_fRotateY, 0.0, 1.0, 0.0); 
glTranslatef(-m_vPosition.x, -m_vPosition.y, -m_vPosition.z); 

는 지금은 자신의 카메라 설정 몇 뷰포트, 각있어 , 모든 카메라에서 다른 카메라의 위치를 ​​렌더링합니다 (단순한 상자로). 위치와 오일러 각에서 룩업 벡터를 계산하는 방법에 대한 단서가 없다는 점을 제외하고는이 카메라에 대한 뷰 벡터도 그려야합니다. 원래 카메라 벡터 (0, 0, -1)에 카메라 회전을 나타내는 행렬을 곱하려고 시도했습니다 ( ). 변형 된 벡터에 카메라 위치를 추가했으나 전혀 작동하지 않습니다. 'm way off base) :

vector v1(0, 0, -1); 
matrix m1 = matrix::IDENTITY; 
m1.rotate(m_fRotateX, 0, 0); 
m1.rotate(0, m_fRotateY, 0); 

vector v2 = v1 * m1; 
v2 = v2 + m_vPosition; // add camera position vector 

glBegin(GL_LINES); 
glVertex3fv(m_vPosition); 
glVertex3fv(v2); 
glEnd(); 

카메라에서부터 방향을 향해 선분을 그리는 것이 좋습니다. 예를 들어 보았지만 아무 것도 찾을 수없는 것 같습니다.

고맙습니다.

+0

궁금한 점이 있나요? 짐발 자물쇠를 다룰 준비가 되셨습니까? – FrustratedWithFormsDesigner

+0

아니, 나는 거기에 있다는 것을 안다. 숨어있다.) 나는 쿼터니언을 나중에 시험해 보겠다. 그러나 나는 이것을 먼저 알아 내고 싶다. – Jaap

+0

카메라를 회전 할 때 실제로 전 세계를 반대 방향으로 회전합니다. 따라서 카메라로 이동하는 대신 벡터에 같은 변형을 적용하면 반대 방향으로 더 많이 회전시킵니다. 행렬의 역행렬을 사용하여보기를 회전시킵니다. – Ivan

답변

4

나는 그것을 알아 냈다. 내가 대답을 추가로 돌아 갔을 때, 나는 이반 그냥 나에게 같은 일 : 기본적으로

말씀하신 것을보고, 카메라 벡터를 그릴,이 수행이에서 선을 그립니다

glPushMatrix(); 

// Apply inverse camera transform 
glTranslatef(m_vPosition.x, m_vPosition.y, m_vPosition.z); 
glRotatef(-m_fRotateY, 0.0, 1.0, 0.0); 
glRotatef(-m_fRotateX, 1.0, 0.0, 0.0); 

// Then draw the vector representing the camera 
glBegin(GL_LINES); 
glVertex3f(0, 0, 0); 
glVertex3f(0, 0, -10); 
glEnd(); 

glPopMatrix(); 

을 뷰 방향에서 10 단위의 카메라 위치.