【发布时间】:2011-10-11 08:42:37
【问题描述】:
我正在使用跟踪设备(仅跟踪旋转,而不是位置)作为输入,并将其旋转矩阵发送到 OpenGL 应用程序。跟踪器在与其轴系对齐时发送一个单位矩阵,即当跟踪器面向其 Y 轴并且跟踪器的向上方向面向其 Z 轴时。如图右侧所示。
如果我旋转跟踪器,我的 opengl 程序中的相应旋转是错误的。为了解决这个问题,我尝试将跟踪器提供的矩阵乘以:
1 0 0 0
0 0 1 0
0 -1 0 0
0 0 0 1
要重新映射,但无论我尝试什么,似乎三个旋转中的一个总是错误的。
是否有一些矩阵可以与我的跟踪器矩阵相乘以获得正确的旋转?
===== 编辑 =====
Android 的 remapCoordinateSystem 似乎实现了我想要的,但我无法理解其中的代码: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/hardware/SensorManager.java#L1459
【问题讨论】:
-
你是右乘还是左乘跟踪器?尝试切换矩阵乘法操作数。
-
你的意思是在你写
glRotatef(degree, axis)之后你得到了错误的旋转,或者当你手动计算变换矩阵时你得到了错误? -
Shahbaz:我只是将跟踪器的矩阵按原样传递给 OpenGL(通过着色器)。如果你看图,当设备绕它的 z 轴旋转时,我应用矩阵的 opengl 对象会以不同的方式旋转。
-
@Jubei 所以你手动计算矩阵?尝试在您的 OpenGL 程序中发送此矩阵: [1 0 0 0; 0 cos_a -sin_a,0; 0 sin_a cos_a 0; 0 0 0 1] 具有不断增加的 alpha。它仍然旋转错误吗?
-
不,它不会旋转错误。即使使用我的跟踪器矩阵,它也不会“错误”旋转。当我的跟踪器围绕 Z 旋转时,openGL 围绕其 Z 轴旋转。没有错,符合预期,但并不如预期。我需要重新映射轴! @datenwolf 我这样复制:modelMatrix = AxisChangeMatrix*TrackerMatrix;
标签: opengl matrix graphics rotation