opengl旋转圆圈上的位置

时间:2017-05-21 12:59:24

标签: opengl rotation position geometry orbit

我目前正在使用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);

}

你有什么想法,为什么我(相机)总是与中心保持相同的距离?

1 个答案:

答案 0 :(得分:0)

好吧,因为你没有提供整个课程 - 我假设Position是一个描述你的相机位置的成员变量。假设你有无限的数学精度,你犯了一个重大的错误。你没有 - 因为你每次迭代位置值,你正在积累越来越多的舍入错误。它确实累计了几百次迭代。你需要做的是每次计算新鲜的位置。你想要的是gluLookAt()。 [gluLookatDocumentation] [1]