GLESカメラにAndroidの向きセンサーデータを使用したいのですが、回転行列を使用します。私はここで非常に良い例を見つけました:
onSensorChangedセンサーデータをOpenGLと組み合わせて使用する方法
ただし、これはGL1.0でのみ機能し、GLES2.0で機能する必要があります。私自身のシェーダーを使用すると、すべてが機能し、カメラを手動で移動することは問題ありません。しかし、例のように回転行列を使用した瞬間、実際には機能しません。
次のように回転行列を生成します。
SensorManager.getRotationMatrix(rotationMatrix, null, bufferedAccelGData, bufferedMagnetData);
私のアプリケーションはLANDSCAPeで実行されているので、後でそのメソッドを使用します(サンプルコードのように):
float[] result = new float[16];
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, result);
return result;
それは彼のコードでは私の電話ではうまくいきましたが、私のものではうまくいきませんでした。私の画面は次のようになります。
回転行列は右に90°回転しているようです(アクティビティのために横向きに切り替えるのを忘れたかのように)。
remap()
この方法を間違った方法で使用することを考えていましたが、この例では、カメラの動きが機能するようになりました。左に回転すると、画面も左に回転しますが、すべてが回転しているため、「上」に回転します(下ではなく右にある地面と比較して)。地面ではなく壁を作ったように見えますが、私の座標は頂点に合っていると確信しています。
の描画方法を調べましたが、GLSurface
ここで何が間違っていたのかわかりません。
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
MatrixStack.glLoadMatrix(sensorManager.getRotationMatrix()); // Schreibt die MVMatrix mit der ogn. Rotationsmatrix
GameRenderer.setPerspMatrix(); // Schreibt die Perspektivmatrix Uniform für GLES. Daran sollte es nicht liegen.
MatrixStack.mvPushMatrix();
drawGround();
MatrixStack.mvPopMatrix();
私が言ったように、カメラを手動で動かすと、すべてが完璧に機能します。では、私が得た回転行列の何が問題になっていますか?