저는 작은 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 개의 다각형이있는 간단한 예제가 아닙니다.)
즉시 알아 두어야 할 점은 다음과 같습니다 ** **. ** 표시된 코드에서 현재 행렬 모드를 알 수없는 경우 (glibody) 투영 행렬). ** 2 ** **이 경우 행렬을 팝핑 할 때 행렬 모드를 다시 modelview로 설정할 필요가 없습니다 ... 처음부터 변경된 적이 없었기 때문입니다. –
@ AndonM.Coleman MODEL_VIEW로 변경 한 후 loadIdentity()를 적용해도 아무 곳이나 프로젝션으로 전환하지 않았으므로 아무 것도 변경하지 않고 테스트했지만 결과는 동일합니다. – crognar