Android OpenGL:如何绕世界轴旋转?

问题描述 投票:0回答:1

我有一个touchRotationMatrix,可以执行以下操作:

Matrix.setIdentityM(identity, 0);
Matrix.rotateM(identity, 0, x, 0,1,0);
Matrix.multiplyMV(v, 0, identity, 0, v, 0)
Matrix.rotateM(identity, 0, y, 1,0,0);
Matrix.rotateM(identity, 0, y, v[0],v[1],v[2]);     
Matrix.multiplyMM(touchRotationMatrix, 0, identity, 0, touchRotationMatrix, 0);

X和Y是归一化的旋转增量。

这像这样应用于我的模型矩阵:

Matrix.multiplyMM(mModelMatrix, 0, mModelMatrix, 0,touchRotationMatrix,0);

这里的问题是我所做的任何旋转都是在其自身的轴上进行的。

让我说明为什么我不想要这个:

如果我从左向右旋转,那就像在转过头一样。如果我先向上旋转,然后从左向右旋转,那么最终我会看着地板或天花板。这是有道理的,因为它在其轴上旋转。

我的问题是,如何使x旋转不在其自身的轴上发生?

我希望我很清楚,任何指导或帮助将不胜感激!谢谢!

P.S我不是OpenGL或LinearAlgebra的专家。

android matrix opengl-es
1个回答
0
投票

不太清楚,但也没有

Matrix.setRotateM(identity, 0, y, 1,0,0);
Matrix.multiplyMM(touchRotationMatrix, 0, identity, 0, touchRotationMatrix, 0);
Matrix.rotateM(touchRotationMatrix, 0, x, 0,1,0);

Matrix.setRotateM(identity, 0, x, 0,1,0);
Matrix.multiplyMM(touchRotationMatrix, 0, identity, 0, touchRotationMatrix, 0);
Matrix.rotateM(touchRotationMatrix, 0, y, 1,0,0);

可能会按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.