围绕点旋转相机

我想围绕兴趣点旋转“相机”。 目前相机只能围绕原点旋转。

很多教程建议使用以下方案:

translate(-P)
rotate
translate(P) 

不幸的是,这不起作用。 我的应用程序使用翻译矢量(QVector3D)以及四元数(QQuaternion)来保存相机的平移和旋转。

目前,它是这样做的,它始终围绕原点旋转:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(translation.x(),translation.y(), translation.z());
multMatrix(accumulatedQuaternionRotation);

其中mulMatrix使用四元数来构建一个传递给glMultMatrixf()的4x4矩阵;

使用这样的东西:

glTranslatef(-translation.x(),-translation.y(), -translation.z());
multMatrix(accumulatedQuaternionRotation);
glTranslatef(translation.x(),translation.y(), translation.z());

导致非常奇怪的控制,我无法进一步描述。 在我的应用程序中,translation.z()表示:向前移动相机。 更改x()和y()会发出类似泛的操作。

我怀疑我使用的是错误的翻译矢量,导致上述操作顺序失败。

有什么我可以检查吗?

编辑:这是四元数旋转如何工作:

        // calculate rotation axis
        QVector3D rotationAxis = QVector3D(diff.y(), diff.x(), 0.0).normalized();

        // update rotation see http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
        accumulatedQuaternionRotation = QQuaternion::fromAxisAndAngle(rotationAxis, diff.length()/4.0f) * accumulatedQuaternionRotation;

差异只是两个鼠标移动事件点的差异。


你想要做的是基本上实现gluLookAt,对吧?

以下是gluLookAt的功能,您应该能够从中复制所需的内容:

http://www.opengl.org/wiki/GluLookAt_code

我不确定你真的想要用vector和quaternion做什么,但是我假设你知道你在做什么,因为它对于不熟悉gluLookat的人来说似乎相当先进。

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

上一篇: Rotate camera around point

下一篇: How to rotate a lightsource around a fixed object (OpenGL)?