OpenGL围绕场景中心旋转相机

4
我有一个场景,基本上是一个15x15的正方形地面(具有坐标(0,0,0) (0,0,15) (15,0,15) (15,0,0)的四边形)。
我将场景中心设置为(7.5,0,7.5)。问题是我不知道如何在该场景中心水平旋转相机(即使相机围绕中心场景做一个水平360圆)。我知道需要使用sin和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);

好的,你只是定义了相机看向的位置。要实际旋转它,你需要改变camx、camy、camz,并让它看向(xref、yref、zref)。因此,如果你的代码中有一个update()方法,你应该计算出围绕所需旋转轴的正确x、y和z增量。你知道旋转矩阵吗? - ChaoSXDemon
1
我知道你需要用正弦和余弦做些什么,但不确定具体是什么。为什么不先读一本数学书呢?我并不想打击你的积极性,但3D图形至少需要一些数学知识。如果我只是“把代码发给你”,你五分钟后就会遇到类似的问题。看看http://arcsynthesis.org/gltut,它有很好的数学背景知识。 - Bartek Banachewicz
2个回答

5
你需要修改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

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

您可以使用 sin/cos 计算您的 camxcamz 位置。 张图片是一个很好的例子,展示了如何工作。

另一种选择是将相机移动到 7.5, 0, 7.5,然后旋转相机以获得所需的相机角度。之后,将相机移动 -7.5, 0, -7.5


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接