2011-12-27 2 views
0

0이 시나리오를 통해 나를 도울 수 있습니까? 나는 3D 세계를 가지고 있으며, 카메라를 1 인칭 방식으로 배치하려고합니다. 실제 목적은 1 인칭 소행성 벨트를 통과하면서 우주선 안쪽에서 볼 때). 이 경우 glulookat의 매개 변수는 무엇입니까? 나는 생각했다 :glulookat() usage-opengl and C++

gluLookAt(30, 30, 30, 0, 0, 0, 0, 1, 0);//the up vector would be normal y axis 

이것이 맞을 까?

또한 카메라를 우주선과 함께 이동하려면 어떻게해야합니까? 우주선을 움직일 때 나는 "눈"좌표를 glulookat에서 이동해야합니까? 눈 좌표 (glulookat의 처음 3 파라메터)와 같은 것이 선박 좌표와 동일해야합니까?

+1

OpenGL에서 up은 일반적으로 y 방향입니다. z 축은 "화면으로"가리 킵니다. –

+0

확인해 주셔서 감사합니다. – biggdman

답변

1

당신이 제안하는 gluLookAt 호출은 카메라를 (30,30,30)에 위치시키고 원점을 가리 킵니다.

gluLookAt(Ship_Position_X,Ship_Position_Y,Ship_Position_Z, 
      Ship_Forward_X,Ship_Forward_Y,Ship_Forward_Z, 
      0,1,0); 

이것은 더 비슷합니다. 카메라가 우주선의 움직임을 따라갈 수 있도록 모든 프레임을 호출해야합니다. 우주선이 배럴 롤을하기를 원한다면, 업 벡터를 추적하기위한 추가 변수가 있어야합니다.

좌표를 유지할 수있는 일종의 구조체가있어서 gl 함수를 오버로드하여 짧은 함수 호출을 작성할 수 있습니다.

// roll your own glVec, or use a co-ordinate class provided by a library you happen to be using. 
inline void gluLookAt(glVec position, glVec forward, glVec up) 
{ 
    gluLookAt(position.x,position.y,position.z,forward.x,forward.y,forward.z,up.x,up.y,up.z); 
}