我目前正在使用http://www.codecolony.de/opengl.htm#camera中的代码,并希望在场景中添加一个运行功能(在相机周围移动相机)。
我认为它就像在给定中心上的圆圈上旋转一样。 它几乎正常工作:它在我选择的点上旋转,视图方向正确。问题是半径不是恒定的,我总是越来越接近中心。
这是我写的代码:
void CCamera::RotateView(GLfloat Angle, SF3dVector center) // in degree
{
// rotate the position over the center
Position.x = cos(Angle*PIdiv180) * (Position.x - center.x) - sin(Angle*PIdiv180) * (Position.z - center.z) + center.x;
Position.z = sin(Angle*PIdiv180) * (Position.x - center.x) + cos(Angle*PIdiv180) * (Position.z - center.z) + center.z;
// adjust the viewDir
ViewDir = center - Position;
//now compute the new RightVector (by cross product)
RightVector = CrossProduct(&ViewDir, &UpVector);
}
你有什么想法,为什么我(相机)总是与中心保持相同的距离?
答案 0 :(得分:0)
好吧,因为你没有提供整个课程 - 我假设Position是一个描述你的相机位置的成员变量。假设你有无限的数学精度,你犯了一个重大的错误。你没有 - 因为你每次迭代位置值,你正在积累越来越多的舍入错误。它确实累计了几百次迭代。你需要做的是每次计算新鲜的位置。你想要的是gluLookAt()。 [gluLookatDocumentation] [1]