繁体   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