绕固定轴旋转对象
我试图让我的应用程序用户通过在屏幕上拖动手指来旋转在屏幕中央绘制的3D对象。屏幕上的水平移动表示绕固定的Y轴旋转,而垂直移动表示绕X轴旋转。我遇到的问题是,如果我只允许绕一个轴旋转,则对象旋转良好,但是一旦引入第二个旋转,该对象就不会按预期旋转。 这是正在发生的情况的图片: 蓝色轴代表我的固定轴。画出具有此固定蓝色轴的屏幕。这就是我要相对于对象旋转的对象。发生的是红色。 这是我所知道的: 围绕Y(0,1,0)的第一次旋转使模型从蓝色空间(称为空间A)移至另一个空间(称为空间B)。 尝试再次使用向量(1、0、0)旋转时,空间B中的x轴会旋转,而不是空间A中的x轴旋转,这不是我的意思。 考虑到我(想)知道的内容(为简洁起见,省略了W坐标),这是我尝试的操作: 首先使用四元数绕Y(0,1,0)旋转。 将旋转Y四元数转换为矩阵。 将Y旋转矩阵乘以我的固定轴x矢量(1、0、0),以获得相对于新空间的X轴。 使用四元数围绕这个新的X向量旋转。 这是代码: private float[] rotationMatrix() { final float[] xAxis = {1f, 0f, 0f, 1f}; final float[] yAxis = {0f, 1f, 0f, 1f}; float[] rotationY = Quaternion.fromAxisAngle(yAxis, -angleX).toMatrix(); // multiply x axis by rotationY to put it in object space float[] …