Ich entwickle eine Augmented-Reality-Anwendung, bei der Objekte auf dem Bildschirm in Bezug auf die Ausrichtung des Telefons verschoben werden sollen. Wenn das Telefon beispielsweise nicht bewegt wird, bleibt das Objekt in der Mitte des Bildschirms. Wenn das Telefon im Hochformat um seine vertikale Achse nach links gedreht wird, bewegt sich das Objekt nach rechts. Dies ist der Sensor I in AndroidAnwenden von Rotationsvektor auf OpenGL-Kamera oder "Ansichtsmatrix"
Zugriff bin@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
mGLAssetSurfaceView.getRenderer().setRotationMatrix(mRotationMatrix);
}
}
Dies ist, wie ich es meine OpenGL-Renderer bin Anwendung:
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(mViewMatrix, 0, mViewMatrix, 0, mRotationMatrix, 0);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
// Draw shape
mSquare.draw(mMVPMatrix);
}
Wie Sie sehen, ich bin Berechnen des Produkts
MVRP
und übergeben Sie das in meine Vertex-Shader. Das Ergebnis ist das Quadrat in der Mitte des Bildschirms, das sich um seine eigene Achse dreht, nicht in Bezug auf das Telefon.