相对3D旋转根据当前旋转变化

时间:2016-03-03 20:09:31

标签: java matrix opengl-es rotation geometry

我在XYZ中以3D度旋转一个物体90度(rX rY rZ)。角度限制在0-360度,我使用以下命令旋转矩阵:

Matrix.rotateM(mRotationMatrix, 0, rX, 1.0f, 0.0f, 0.0f);
Matrix.rotateM(mRotationMatrix, 0, rY, 0.0f, 1.0f, 0.0f);
Matrix.rotateM(mRotationMatrix, 0, rZ, 0.0f, 0.0f, 1.0f);

为了弄清楚旋转后物体向上,向右和向外的方向,我只需解析旋转矩阵的左上角3x3。通过阅读,这很有效:

mRotationMatrix[0], mRotationMatrix[1], mRotationMatrix[2]
mRotationMatrix[4], mRotationMatrix[5], mRotationMatrix[6]
mRotationMatrix[8], mRotationMatrix[9], mRotationMatrix[10]

从这里我需要弄清楚如何使用四个不同的公式|命令|函数更新rX,rY,rZ,其中每个公式都沿着生成的X轴和Y轴向后和向前旋转对象。想象一下,如果四个命令可以在四个方向上推动物体,并且物体将在该方向上“滚动”90度。

我没有其他信息,只能操纵rX,rY和rZ旋转变量。我不能在结果中添加第四个旋转。不知何故,我必须计算对rX,rY和rZ的变化分别对结果旋转矩阵产生相同的影响,而与rX,rY和rZ已设置的无关。

我无法计算数学。知道物体当前朝向哪一侧是不够的,因为它可以在四个不同的方向上旋转并且仍然具有相同的一面,等等。即使我确切地知道物体的六个方向指向的方向我仍然无法弄清楚我应该操纵哪些rX,rY或rZ来实现旋转。

我开始倾向于为所有可能的组合创建硬编码查找表,但我真的想避免这种情况(我猜这将是4 * 4 * 4 * 4,其中最后四个是“滚动”方向)。

另一种看待它的方式是,而不是考虑将顶侧90度滚动到面向左,右,远或靠近的四个侧面中的任何一个可以说我需要弄清楚如何操纵rX,rY和rZ将物体的任何一侧(向上或向下)旋转到顶部。我希望这能解释我的目标是什么。

0 个答案:

没有答案