OpenGL rotating a camera around a point
In OpenGL I'm trying to rotate a camera around a point, with camera being distance r from the point and facing the point when it rotates. In other words, I want the camera to move along the circumference of a circle at a radius r from the center, with the camera facing the center at any point along the circumference.
Lets say that in 3d space the center of the circle is (3, 0, 3);
I've tried:
// 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);
where CameraAngle is the degrees being moved around the circle.
My end result is the camera is still rotating along the origin, not the center of the circle. Can anyone help me fix this problem? Thanks!
You need to either:
or:
gluLookAt
to keep the camera pointing at the center of the circle (*) rotation functions normally rotate about the origin. To rotate around another point P
you have to:
it is a little confusing, but i think you should:
// 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)
note the order must NOT be changed.
Why bother with all the trouble of rotating the camera and not rotate the scene itself?
It's much more straight forward. just rotate the modelview matrix around the origin. You'll get the exact same result.
上一篇: OpenGL围绕一条线旋转对象
下一篇: OpenGL围绕某个点旋转摄像头