[英]Opengl Model Matrix doesnt rotate around the origin after one rotation
我想在x,y和z方向上旋轉我的模型Matix,但是它以一種意外的方式旋轉。 我使用Qt。
QMatrix4x4 mMatrix;
mMatrix.setToIdentity();
mMatrix.rotate(yAngle, QVector3D(0, 1, 0));
mMatrix.rotate(zAngle, QVector3D(0, 0, 1));
mMatrix.translate(cube->getPosition());
第一次旋轉后,跟隨的旋轉圍繞新模型Matrix的基礎旋轉,而我希望跟隨的旋轉圍繞原點旋轉。
我畫了一個小草圖,所以我的問題可能更清楚了(黑色顯示了當前情況,綠色顯示了我想要的樣子): 綠色箭頭顯示我想要的樣子。
我認為,只要簡單地反轉在QMatrix4x4
類上進行的調用順序,就可以得到理想的結果。 結合兩個旋轉:
QMatrix4x4 mMatrix;
mMatrix.setToIdentity();
mMatrix.rotate(zAngle, QVector3D(0, 0, 1));
mMatrix.rotate(yAngle, QVector3D(0, 1, 0));
缺少某種文檔,但是通過查看QMatrix4x4
源代碼,我得到的印象是,它以與OpenGL使用的矩陣庫或多或少標准的方式以及OpenGL固定流水線的方式應用矩陣運算。曾經工作。
這意味着當您合並矩陣時,新的矩陣將從右側相乘。 結果,當將組合矩陣應用於向量時,最后指定的子變換首先應用於向量。 或換句話說,您可以按照要應用的相反順序指定轉換。
在您的示例中,您想先繞y軸旋轉,然后繞z軸旋轉,您需要先指定z旋轉,然后指定y旋轉。
我自己弄清楚了,每個對象都需要有自己的旋轉矩陣/ Quaterunion。 通過創建具有所需旋轉的旋轉矩陣並向右乘以對象的現有旋轉矩陣,可以完成圍繞世界原點的新旋轉。
好吧,如果您希望綠色箭頭發生,則意味着您想要繞x軸旋轉,負方向旋轉90度(正方向旋轉270度)。
為了使事情變得簡單,請這樣考慮:
x
,對嗎? 由於x
不變,因此看起來您正在繞着x旋轉,而您確實在旋轉。 (1, 0, 0)
將是指向正x
的方向向量。 雖然我不太了解您使用的功能,但我猜想第二個調用應該是:
mMatrix.rotate(270, QVector3D(1, 0, 0));
相反,如果支持負值,則可以選擇-90
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.