現在androidstudioでアプリ開発を行っており、openglを使用しています。
仮想のx,y,z座標上(例えば1,1,1)に物体を設置し、画面を傾けても回転ベクトルセンサーを使うことで座標(1,1,1)に置かれたまま動いていないように見えるVRのようなものを作っているところです。
しかし現在のコードでは画面を傾きに比べて、物体が動く量が少なくリアルに見えません。
配列の計算なので増加量を増やせばいいと思うのですがどこをいじればいいのかわかりません。
#当該のコード
onSensorChangedの中で
TYPE_ROTATION_VECTORを使用して値を出し
getRotationMatrixFromVectorを使って配列(rotmatrix)に変換し出力させています
java
1 2float[] rotmatrix= new float[16]; 3 4 public RotationSensor(Context context) { 5 mContext = context; 6 mSensorManager = (SensorManager) mContext.getSystemService( Context.SENSOR_SERVICE ); 7 8 mSensorEventListener = new SensorEventListener() 9 { 10 float[] rMat = new float[16]; 11 12 public void onSensorChanged (SensorEvent event) { 13 if ( event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR ) { 14 SensorManager.getRotationMatrixFromVector(rMat, event.values); 15 16 SensorManager.remapCoordinateSystem(rMat, SensorManager.AXIS_X, SensorManager.AXIS_Y, rotmatrix ); 17 } 18 } 19 public void onAccuracyChanged (Sensor sensor, int accuracy) {} 20 }; 21 }
このコードは上のコードで出力した配列(rotmatrix)と原点に設置されている視点を表す配列(c1Matrix)をmultiplyMM()でかけ合わせています
そして出力されたcMatrixを使うと傾きによって視点が変わります。
java
1float[] cMatrix=new float[16]; 2float[] c1Matrix=new float[16]; 3Matrix.setLookAtM(c1Matrix, 0, 4 0f,0f,0f, 5 0.0f, 0.0f, -1.0f, 6 0.0f, 1.0f, 0.0f); 7 8Matrix.multiplyMM(cMatrix, 0, c1Matrix, 0, rotmatrix, 0); 9
傾きから獲得できる値(ベクトル?)を配列にして映像の動きを大きくするには単純に単位行列に3を掛け合わせたような配列とrotmatrixをmultiplyMM()でさらに掛け合わせればいいのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/12/09 04:33
2017/12/09 04:40