用于旋转 3D 立方体的 Android 方向传感器

标签 android orientation accelerometer sensors

我正在尝试使用 Android 手机制作 3-dof Controller ,类似于 Wiimote。使用 Accelerometer 来识别 Controller 的方向(使用 getOrientation() 方法进行计算)

我正在通过使用这些值来旋转由 PC 中的 opengl 绘制的立方体来测试方向值。问题是,它似乎不起作用。如果手机旋转超过特定的旋转角度,立方体就会旋转到某个奇怪的方向。

在没有计算机图形学知识的情况下,我找到了引用资料,说在欧拉旋转中,3D 对象的最终图形取决于每个轴上的旋转顺序。跟问题有关系吗??如果是这样,正确的顺序是什么?当前顺序是“yaw->pitch->roll”

我不认为这是因为所谓的校准问题,因为值变化很大。

最佳答案

方向传感器已弃用。获取可靠传感器值的最佳方法是使用旋转矢量传感器。它是一种基于软件的传感器,可从基于硬件的加速度计和磁力计传感器中获取数据。

旋转向量将设备的方向表示为角度和轴的组合,其中设备已围绕轴(x、y 或 z)旋转角度 θ。以下代码向您展示了如何获取默认旋转矢量传感器的实例。查看info about this sensor在 Android 开发站点中。

这是一个如何使用旋转向量获取可靠值的示例:

public void onSensorChanged(SensorEvent event) {
       if(sensor.getType()==Sensor.TYPE_ROTATION_VECTOR){
           float[] rotationMatrix = new float[16];
           SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);
           SensorManager.getOrientation(rotationMatrix, mOrientValues);
           for(int i=0; i<3; i++)
              mOrientValues[i]=(float)
                  Math.toDegrees(mOrientValues[i])+180.0f;//orientation in degrees
}

关于用于旋转 3D 立方体的 Android 方向传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499862/

相关文章:

android - 在 Android 中更改方向时布局会损坏

python - python中的水平图

authentication - WEKA 中加速度计缺失数据和分类

java - 您如何从 Parse 在 Android 中的两个不同 Activity 之间进行查询?

android - 有没有办法使用渐进式网络应用程序 (PWA) 添加徽章通知?

react-native - 如何检测 landscapeRight 到 landscapeLeft 方向的变化?

java - android中两个矩形之间的碰撞检测

ios - 使用 iphone 中的加速度计功能在步行时计算步数的逻辑

java - 在 Sip/VoIP 或常规通话期间收听 DTMF 音

java - Android - 如何将五个变量值传递给后台线程并从中接收五个值?