2013-01-02 3 views
3

기본적으로 15x15 크기의 사각 바닥 (좌표가 (0,0,0) (0,0,15) (15,0,15) 인 장면) (15,0,0)).OpenGL 장면 중심을 중심으로 카메라 회전

장면 중심을 (7.5,0,7.5)로 설정했습니다. 문제는 그 장면의 중심을 중심으로 카메라를 수평으로 회전시키는 방법을 알아낼 수 없다는 것입니다 (일명 카메라가 장면 중앙에서 360 도의 원으로 만듦). 나는 당신이 죄와 코사인으로 무엇인가를해야한다는 것을 알고 있지만 정확히 무엇을 모르는 지 알고 있습니다.

당신은 당신의 camxcamz 위치를 계산하는 죄/COS를 사용할 수 있습니다 : 당신이 사용할 수있는 두 가지 방법이 있습니다

//set camera position 
//camera height is 17 
GLfloat camx=0, camy=17, camz=0; 

//set center of scene 
GLfloat xref=7.5, yref=0, zref=7.5; 

gluLookAt(camx, camy, camz, xref, yref, zref, 0, 1, 0); 

//projection is standard gluPerspective, nothing special 
gluPerspective(45, (GLdouble)width/(GLdouble)height, 1, 1000); 
+0

음이, 당신은 단순히 정의 된 카메라가보고된다. 실제로 회전 시키려면 camx, camy, camz를 변경하고 (xref, yref, zref)를보아야합니다. 따라서 코드에 update() 메서드가있는 경우 원하는 회전 축을 중심으로 올바른 x, y 및 z 증분을 계산해야합니다. 회전 매트릭스에 대해 아십니까? – ChaoSXDemon

+1

* 죄와 cos로 무언가를 할 필요가 있다는 것을 알고 있지만, 정확히 무엇을 알지는 못합니다. * 처음에는 수학에 관한 책을 읽지 않으십니까? 나는 당신을 낙담하고 싶지 않지만, 3D 그래픽은 적어도 * 일부 수학 지식을 필요로합니다. "코드를 보내면"5 분 후에 비슷한 문제가 나타납니다. http://arcsynthesis.org/gltut을 살펴보십시오. 훌륭한 수학적 배경을 가지고 있습니다. –

답변

4

camx 및 camz 변수를 수정해야합니다.

걷고 싶은 지점은 원 위에 놓여 있고 좌표는 x = r*sin(alpha) + 7.5, z = r*cos(alpha) + 7,5으로 결정됩니다. 여기서 r은 원의 반지름이고 alpha는 xy 평면과 카메라의 현재 위치 사이의 각도입니다.

물론 각도는 회전 속도와 애니메이션 시작부터의 시간에 따라 다릅니다. 기본적으로 올바른 각도를 설정 한 다음 위의 식에서 좌표를 계산하면됩니다.

원 좌표에 대한 자세한 정보를 들어, 위키를 참조하십시오 http://en.wikipedia.org/wiki/Unit_circle

1

내 생각 : 여기

코드 (보통 C)입니다. This 그림이 좋은 예입니다.

카메라를 7.5, 0, 7.5으로 옮긴 다음 원하는 카메라 각도로 카메라를 회전시킬 수도 있습니다. 그 후 카메라를 -7.5, 0, -7.5으로 움직입니다.

관련 문제