我想圍繞感興趣的點旋轉我的「相機」。目前相機只能圍繞原點旋轉。在opengl中圍繞興趣點旋轉相機
很多教程的建議使用以下方案:
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;
差異僅僅是兩個鼠標移動事件點的差異。
您的四元數必須產生錯誤的矩陣。 –
我添加了四元數旋轉的代碼。這很奇怪,因爲旋轉在第一種情況下沒有問題。 – anopheles