簡體   English   中英

Android Orientation傳感器用於旋轉3D立方體

[英]Android Orientation sensor for rotation the 3D cube

我正在嘗試使用Android手機制作3-dof控制器,類似於Wiimote。 使用Accelerometer識別控制器的方向(使用getOrientation()方法進行計算)

我正在測試方向值,通過使用這些值來旋轉由opengl在PC中繪制的立方體。 問題是,它似乎不起作用。 如果手機在特定旋轉上旋轉,則立方體會旋轉到某個奇怪的方向。

在沒有計算機圖形知識的情況下,我發現參考文獻說在歐拉旋轉中,3D物體的最終圖形取決於每個軸上的旋轉順序。 它與問題有關嗎? 如果是這樣,那么正確的訂單是什么? 目前的訂單是“yaw-> pitch-> roll”

我不認為這是因為所謂的校准問題,因為價值變化很大。

Orientation傳感器已棄用。 獲得可靠傳感器值的最佳方法是使用旋轉矢量傳感器。 它是一種基於軟件的傳感器,可從加速度計和磁力計硬件傳感器獲取數據。

旋轉矢量表示作為角度和軸的組合的裝置的取向,其中裝置圍繞軸(x,y或z)旋轉了角度θ。 以下代碼顯示如何獲取默認旋轉矢量傳感器的實例。 請參閱Android Dev Site中有關此傳感器信息

這是如何使用旋轉向量來獲取可靠值的示例:

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
}

當電話接近垂直位置且沒有校准有幫助時,我遇到類似的問題, getOrientation()返回奇怪的結果。

簡單的解決方案是使用這個傳感器:

manager = (SensorManager) context.getApplicationContext()
                                 .getSystemService(Context.SENSOR_SERVICE);
Sensor orientationSensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);`

顯然這個傳感器在較新的平台上已被棄用,但無論如何它都可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM