2014-06-10 3 views
1

저는 작은 3D 세계에서 일하고 있습니다. 지금은 카메라를 고치고 있습니다.OpenGL 카메라 주변 장면 이동

카메라는 세계의 고정 된 위치에 머무르는 반면 카메라는 마우스와 키보드 (세계를 따라 움직이는 카메라를 시뮬레이션)를 사용하여 세계를 움직일 수 있습니다. 난 여전히 서서 모든 것이 잘 작동 주위 만 보면만큼

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// store current matrix 
glMatrixMode(GL_MODELVIEW); 

glLoadIdentity(); 

glPushMatrix(); 

GLfloat light_pos [] = {3, -1, 0, 1}; 
GLfloat light_dir [] = {0, 0, -1}; 

glLightfv(GL_LIGHT0, GL_POSITION, light_pos); 
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_dir); 

glTranslated(-cam->getXPos(), -8, -cam->getZPos()); 
glRotated(cam->getYRot(), 1, 0, 0); 
glRotated(cam->getXRot(), 0, 1, 0); 

GLfloat diff [] = { .5, .5, .5, 1.0 }; 

glMaterialfv (GL_FRONT, GL_DIFFUSE, diff); 

glPushMatrix(); 
glTranslated(0, 0, -20); 
glCallList(displayLists[LISTWALL]); 
glPopMatrix(); 

// restore current matrix 
glMatrixMode(GL_MODELVIEW); 
glPopMatrix(); 

: 여기

내 그리기 함수의 코드입니다. 다른 손으로 이동하면 이상한 일이 일어나기 시작합니다. 모든

첫 번째가 Y로 고정되어야하는 동안 카메라의 변화를 Y 좌표 = 8

두 번째로 내가 앞으로해야 눌러 세계를 이동하려고 할 때 (내가 -8하는 장면을 번역 그 이유는) z 축을 따라 가야하지만 카메라가 가리키는 위치로 이동합니다 (아마도 첫 번째 문제와 관련이 있습니다).

그리고 마지막으로 장면에서 주위를 둘러 보니 이상한 행동이 시작됩니다. 카메라는 그 자체를 중심으로 회전 할뿐만 아니라 시작점을 중심으로 회전합니다. (완전 3D 세계에서는 분명합니다. 여기에 표시된 1 개의 다각형이있는 간단한 예제가 아닙니다.)

+0

즉시 알아 두어야 할 점은 다음과 같습니다 ** **. ** 표시된 코드에서 현재 행렬 모드를 알 수없는 경우 (glibody) 투영 행렬). ** 2 ** **이 경우 행렬을 팝핑 할 때 행렬 모드를 다시 modelview로 설정할 필요가 없습니다 ... 처음부터 변경된 적이 없었기 때문입니다. –

+0

@ AndonM.Coleman MODEL_VIEW로 변경 한 후 loadIdentity()를 적용해도 아무 곳이나 프로젝션으로 전환하지 않았으므로 아무 것도 변경하지 않고 테스트했지만 결과는 동일합니다. – crognar

답변

0

솔루션을 찾았습니다. 임의의 것들을 시도한 후에 회전과 번역, x와 y 회전은 번역 전에 발생해야했습니다.

내 질문에 설명 된 모든 문제가 해결되어 카메라가 y = 8에 머무르고 회전이 더 이상 시작점 주변에서 발생하지는 않지만 카메라가 위치한 지점에서 발생하며 앞으로 이동하면 고정됩니다 카메라는 원래의 Z 축을 따라 움직입니다.