2011-05-07 5 views
5

gluLookAt를 사용하려고 시도했지만 몇 가지 문제가 생겼습니다 ... 처음 사용하는 것은 카메라의 기본 위치입니다. 사용하려고 할 때마다 전체 장면이 옆으로 회전하는 것처럼 보입니다. 그리고 위로 .... 내 두 번째 질문은 .... 내가 gluLookAt (Posx, Posy, PosZ, yaw, 피치, 롤, 그 다음 세 가지 벡터)를 읽은 것입니다C++ OpenGL gluLookAt help

어떤 순서가 yaw인지 피치와 롤이 있어야한다고 생각하십니까?

해결
카메라의 기본 위치하는 gluLookAt에서 (0, 0, 0, 0, 0, -1, 0, 1, 0); 모든 도움을 주신 Drew에게 감사드립니다. D

답변

4

gluLookAt() 인수에 대한 잘못된 정보를 얻은 것 같습니다.

eyeX, eyeY, eyeZ: 
    World coordinates of camera location 

centerX, centerY, centerZ: 
    World coordinates of camera aimpoint (what it's looking at). 
    This point will be in the center of the resulting image, assuming 
    that it lies between the near & far clip planes. 

upX, upY, upZ: 
    A vector (preferrably orthogonal to the line of sight) that specifies the 
    roll orientation of the camera (that is, which way is "up" in the image). 

당신이 볼 수 있듯이, 피치, 롤, 또는 요의 명시 적 언급이없는 다음과 같이 OpenGL을 2.1 online documentation에서 인수가 있어야한다.

또한 올바르게 호출 한 경우 기본적으로 카메라는 (0, 0, -1)입니다. 그러나 거의 항상 모델 뷰 매트릭스를 ID로 설정하여 gluLookAt를 호출하므로 중요하지 않습니다.

+0

아하 -1 ...하지만 센터는 무엇을 의미합니까 ?? 죄송합니다. 정말 OpenGL을 처음 사용하셨습니다. –

+0

@ | Phantasm | : 명확하게하려고 노력했습니다. 그것은 카메라가보고있는 지점입니다. 따라서 center - eye는 시선 벡터이다. –

+0

OpenGL에 카메라가 없습니다. 기간. OpenGL에 카메라가 없으면 기본 카메라 위치 (0,0, -1)가 없습니다. 실제로 일어나는 일은 modelview라고 불리는 월드 공간에서 좌표를 변환하는 행렬을 가지고 있다는 것입니다. 카메라의 어떤 움직임도 전 세계의 반대 운동으로 볼 수 있습니다. gluLookAt는 현재 모델 뷰에서 반대 변형을 적용했습니다. 따라서 일반적으로 모델 뷰는 모델 뷰를 ID로 재설정하여 ** 원점 ** (0,0,0)에 모든 종류의 카메라를 배치합니다. – datenwolf