문제

OpenGL에서는 카메라를 한 지점 주위에서 회전 시키려고 노력하고 있으며, 카메라는 지점에서 거리 R이며 회전 시점을 향합니다. 다시 말해, 카메라가 중앙의 반경 R에서 원의 둘레를 따라 움직이고, 카메라는 둘레의 어느 지점에서도 중앙을 향하고 싶습니다.

3D 공간에서 원의 중심이 (3, 0, 3)이라고 가정 해 봅시다.

난 노력 했어:

// move to center of circle    
glTranslatef(-3, 0, -3)
// move a distance away from the circle
glTranslatef(0, 0, r);
// rotate along the y "up" axis
glRotatef(CameraAngle, 0, 1, 0);

여기서 카메라 앵이되는 곳은 원 주위로 이동하는 정도입니다.

내 최종 결과는 카메라가 원의 중심이 아니라 원점을 따라 여전히 회전하고 있습니다. 누구 든지이 문제를 해결하도록 도와 줄 수 있습니까? 감사!

도움이 되었습니까?

해결책

중 하나가 필요합니다.

  • 원점 주위의 카메라를 회전시킨 다음 번역 (*)

또는:

  • 사용 gluLookAt 카메라가 원의 중앙을 가리키기 위해

(*) 회전 기능은 일반적으로 원점에 대해 회전합니다. 다른 지점 주위에서 회전합니다 P 당신은 다음을해야합니다 :

  • 번역 (-p)
  • 회전
  • 번역 (p)

다른 팁

조금 혼란 스럽지만, 나는 당신이해야한다고 생각합니다.

// move camera a distance r away from the center
glTranslatef(0, 0, -r);

// rotate 
glRotatef(angley, 0, 1, 0);
glRotatef(anglex, 1, 0, 0);

// move to center of circle    
glTranslatef(-cx, -cy, -cz)

순서를 변경해서는 안됩니다.

카메라를 회전시키는 데있어 모든 문제를 괴롭히고 장면 자체를 회전시키지 않는 이유는 무엇입니까?
훨씬 더 간단합니다. 원점에서 ModelView 행렬을 회전시키기 만하면됩니다. 똑같은 결과를 얻을 수 있습니다.

Glulookat ()로 해결하기가 훨씬 쉽게 해결할 수 있습니다. 카메라의 경로를 정의하고 (원이 쉽습니다!) "중심"지점을 고정 상태로 유지합니다 (예 :보고있는 것).

유일한 트릭은 좋은 벡터를 정의하는 것이지만 일반적으로 너무 많은 작업은 아닙니다. 경로와 대상 지점이 동일한 평면에있는 경우 매번 동일한 벡터를 사용할 수 있습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top