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
旋转,您必须:
这有点令人困惑,但我认为你应该:
// 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)
请注意,订单不得更改。
为什么要麻烦旋转相机而不旋转场景本身?
这更直截了当。 只需围绕原点旋转模型视图矩阵。 你会得到完全相同的结果。