[英]Whats wrong with my Matrix Rotation?
我試圖通過旋轉模型
(float) Math.atan2(-camX.getXf() * padX, -camDir.getZf() * padY)
ÿ
和
-MathUtils.HALF_PI
ž
但
model.setRotation(new Matrix3(1,0,0,
0,(float) Math.atan2(-camX.getXf() * padX, -camDir.getZf() * padY),0,
0,0,-MathUtils.HALF_PI));
它在y軸上旋轉(雖然它是側面因為它是md2模型)但旋轉Z軸並不會使其正面朝上。 知道為什么嗎?
每個變量都在矩陣的相應區域中。
編輯:好的,現在我正在使用此代碼:
float x = 0;
float y = (float) Math.atan2(-camX.getXf() * padX, -camDir.getZf() * padY);
float z = (float) -MathUtils.HALF_PI;
float a = (float) Math.sin(x);
float A = (float) Math.cos(x);
float b = (float) Math.sin(y);
float B = (float) Math.cos(y);
float c = (float) Math.sin(z);
float C = (float) Math.cos(z);
Matrix3 m = new Matrix3(A*b, -(B*a),b,
(C*a)+(A*b*c), (A*C)-(a*b*c), -(B*c),
(a*c)-(A*C*b), (A*c)+(C*a*b), B*C);
但是現在沒有一個軸正確旋轉。
這是矩陣的設置方式:
xx, xy, xz,
yx, yy, yz,
zx, zy, zz
旋轉矩陣不能以這種方式工作。 角度不會進入矩陣! 相反,我假設Java處理旋轉矩陣就像笛卡爾坐標中的任何其他變換矩陣一樣。 因為我認為您不想手動輸入旋轉矩陣,所以最好從新的Matrix3開始(我希望它在單位矩陣中自動初始化),然后使用rotateX(float x)連續旋轉它,rotateY(float y)和rotateZ(float z),其中x,y,z是你想要旋轉的角度。 (如果您至少使用com.threed.jpct.Matrix。)請注意,結果取決於三個旋轉的連續性。
這是一個關於如何使用旋轉矩陣的典型教程http://www.euclideanspace.com/maths/algebra/matrix/orthogonal/rotation/index.htm 。 圍繞三個軸施加旋轉的順序是至關重要的。 或者,您可以圍繞任意軸旋轉。 您也可以想要探索四元數 。
這就是2D中旋轉矩陣的樣子; 它繞逆時針方向圍繞z軸旋轉(x,y)空間中的點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.