OpenGL围绕某个点旋转摄像头

在OpenGL中,我试图围绕一个点旋转摄像头,摄像头距离该点的距离为r,并在旋转时面向该点。 换句话说,我希望摄像机沿圆周以半径r从中心移动,相机朝向圆周任意点的中心。

可以说,在三维空间中,圆的中心是(3,0,3);

我试过了:

// move to center of circle    
glTranslatef(-3, 0, -3)
// move a distance away from the circle
glTranslatef(0, 0, r);
// rotate along the y "up" axis
glRotatef(CameraAngle, 0, 1, 0);

CameraAngle是围绕圆移动的度数。

我的最终结果是相机仍然沿原点旋转,而不是圆的中心。 任何人都可以帮我解决这个问题吗? 谢谢!


您需要:

  • 在原点周围旋转相机然后翻译它(*)
  • 要么:

  • 使用gluLookAt将相机指向圆圈的中心
  • (*)旋转功能通常围绕原点旋转。 要围绕另一个点P旋转,您必须:

  • 翻译(-P)
  • 回转
  • 翻译(P)

  • 这有点令人困惑,但我认为你应该:

    // move camera a distance r away from the center
    glTranslatef(0, 0, -r);
    
    // rotate 
    glRotatef(angley, 0, 1, 0);
    glRotatef(anglex, 1, 0, 0);
    
    // move to center of circle    
    glTranslatef(-cx, -cy, -cz)
    

    请注意,订单不得更改。


    为什么要麻烦旋转相机而不旋转场景本身?
    这更直截了当。 只需围绕原点旋转模型视图矩阵。 你会得到完全相同的结果。

    链接地址: http://www.djcxy.com/p/81829.html

    上一篇: OpenGL rotating a camera around a point

    下一篇: Rotating model in openGL 2 in iOS