OpenGL ES20 - 旋转矩阵螺丝机芯 - 用天使旋转视图矩阵?

时间:2014-02-26 11:21:19

标签: android matrix rotation opengl-es-2.0

现状:

创建平截头体,保存在mViewMatrix中,我也有四元数q,三个角度的浮动数组(偏航,滚动,俯仰等)以及旋转矩阵{{1 - 表示四元数以及角度的旋转。

我想要实现的是某种增强现实效果。我目前正在将mRotationMatrix应用于mRotationMatrix

mViewMatrix

这也处理整个旋转,向上矢量,因此旋转工作正常。但由于旋转矩阵来自设备的传感器,因此旋转矩阵围绕错误的轴。

作为参考,此图片应该有所帮助:

enter image description here

场景#1: Yaw:指向北方,它是0。 间距:0 掷骰:0

相机向右看,但是y是正确的。

如果我现在增加音高,即拿起设备,相机现在向右移动,而不是向上看。

如果我增加偏航,相机会向上移动,而不是向右移动。

如果我增加滚动,就会发生奇怪的转换。

在视频中,我按此顺序执行动作。指南针也显示正确的动作,只是OpenGL相机的变形被拧紧。

视频:Sample screenrecord video

目前,我正在使用以下代码来获取旋转矩阵,以及俯仰/滚动/偏航:

    Matrix.setLookAtM(mTmpMatrix, 0, // mViewMatrix
            mCameraPosition[0], mCameraPosition[1], mCameraPosition[2], // eye
            mTargetRotPosition[0], mTargetRotPosition[1], mTargetRotPosition[2],
            0, 1, 0); // up

    Matrix.setIdentityM(mViewMatrix, 0);
    Matrix.multiplyMM(mViewMatrix, 0, mRotationMatrix, 0, mTmpMatrix, 0);

我已经尝试了其他一些重映射组合,但它们似乎都没有改变运动翻译中的任何内容。

我的另一个想法是自己旋转我在setLookAtM中使用的向量。但我不知道我应该如何使用向上矢量。

如果有人可以向我展示/指出我如何处理旋转的方向,我执行的动作将被正确解析,否则我应该如何用OpenGL中的裸角进行此操作,我会要感恩。

1 个答案:

答案 0 :(得分:0)

在我的情况下,我每次手指在屏幕上移动时都会计算增量旋转增量(角度)。从这个增量旋转角度,我创建了一个临时旋转矩阵。然后,我发布了我的整体旋转矩阵(带有所有先前增量旋转的历史旋转矩阵),并最终在我的绘制方法中使用了这个整体旋转矩阵。

问题在于我使用我的整体旋转POST增加旋转增量旋转,这意味着......我的最新旋转将首先应用于对象,最后应用最旧(第一)旋转。

这是弄乱一切的。

解决方案很简单,而不是后期乘法,我将增量旋转与我的整体旋转矩阵相乘。我的旋转现在是正确的顺序,一切正常。

希望这有帮助。

这是我从中学到的地方。检查这个问题。 “9.070如何围绕固定坐标系而不是对象的局部坐标系转换对象?” http://www.opengl.org/archives/resources/faq/technical/transformations.htm#tran0162