[英]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.