现状:
创建平截头体,保存在mViewMatrix
中,我也有四元数q
,三个角度的浮动数组(偏航,滚动,俯仰等)以及旋转矩阵{{1 - 表示四元数以及角度的旋转。
我想要实现的是某种增强现实效果。我目前正在将mRotationMatrix
应用于mRotationMatrix
:
mViewMatrix
这也处理整个旋转,向上矢量,因此旋转工作正常。但由于旋转矩阵来自设备的传感器,因此旋转矩阵围绕错误的轴。
作为参考,此图片应该有所帮助:
场景#1: Yaw:指向北方,它是0。 间距:0 掷骰:0
相机向右看,但是y是正确的。
如果我现在增加音高,即拿起设备,相机现在向右移动,而不是向上看。
如果我增加偏航,相机会向上移动,而不是向右移动。
如果我增加滚动,就会发生奇怪的转换。
在视频中,我按此顺序执行动作。指南针也显示正确的动作,只是OpenGL相机的变形被拧紧。
目前,我正在使用以下代码来获取旋转矩阵,以及俯仰/滚动/偏航:
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中的裸角进行此操作,我会要感恩。
答案 0 :(得分:0)
在我的情况下,我每次手指在屏幕上移动时都会计算增量旋转增量(角度)。从这个增量旋转角度,我创建了一个临时旋转矩阵。然后,我发布了我的整体旋转矩阵(带有所有先前增量旋转的历史旋转矩阵),并最终在我的绘制方法中使用了这个整体旋转矩阵。
问题在于我使用我的整体旋转POST增加旋转增量旋转,这意味着......我的最新旋转将首先应用于对象,最后应用最旧(第一)旋转。
这是弄乱一切的。
解决方案很简单,而不是后期乘法,我将增量旋转与我的整体旋转矩阵相乘。我的旋转现在是正确的顺序,一切正常。
希望这有帮助。
这是我从中学到的地方。检查这个问题。 “9.070如何围绕固定坐标系而不是对象的局部坐标系转换对象?” http://www.opengl.org/archives/resources/faq/technical/transformations.htm#tran0162