[英]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.