簡體   English   中英

旋轉一圈后,Opengl模型矩陣不會圍繞原點旋轉

[英]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旋轉,而您確實在旋轉。
  • 現在,將拇指指向正x指向的方向,然后像圓柱一樣隨意合攏其余的手指。 其余手指卷曲的方向就是旋轉的方向。
  • 因為您希望在與您的那四個手指卷曲的方向相反的方向上旋轉90度,或者在相同方向的270個方向上旋轉...是的。

(1, 0, 0)將是指向正x的方向向量。 雖然我不太了解您使用的功能,但我猜想第二個調用應該是:

mMatrix.rotate(270, QVector3D(1, 0, 0));

相反,如果支持負值,則可以選擇-90

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM