2013-01-02 90 views
3

中心场景的-I有一个场景这基本上是一个正方形底板测量15×15(具有坐标(0,0,0四)(0,0,15)(15,0,15) (15,0,0))。OpenGL的旋转相机围绕

我已经设定的中心的场景是在(7.5,0,7.5)。问题是我无法弄清楚如何在相机场景中心水平旋转摄像机(也就是让摄像机围绕场景中心做一个360度的水平圆)。我知道你需要用罪和cos做点什么,但不知道究竟是什么。

下面是代码(纯C):

//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有关的事情,但是不知道究竟是什么。* Y你没有先读过关于数学的书吗?我不想让你灰心,但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

我认为有两种方法可以使用:

您可以使用正弦/余弦来计算你的camxcamz位置。 This图片是一个很好的例子,它是如何工作的。

另一种方法是将摄像机移动到7.5, 0, 7.5,然后用你想要的相机角度旋转的摄像头。之后,您移动相机-7.5, 0, -7.5