簡體   English   中英

我的矩陣旋轉有什么問題?

[英]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)空間中的點。

http://en.wikipedia.org/wiki/Rotation_matrix

暫無
暫無

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

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