Je construis une application de réalité augmentée dans laquelle je souhaite déplacer des objets sur l'écran en fonction de l'orientation du téléphone. Par exemple, si le téléphone est maintenu immobile, l'objet reste au centre de l'écran. Si le téléphone tourne à gauche autour de son axe vertical en mode portrait, l'objet se déplace vers la droite. Ce capteur est le j'accéder à AndroidApplication de Rotation Vector à une caméra OpenGL ou "view matrix"
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
mGLAssetSurfaceView.getRenderer().setRotationMatrix(mRotationMatrix);
}
}
Voici comment je l'appliquer à mon OpenGL renderer:
@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);
}
Comme vous pouvez le voir, je suis calculer le produit
MVRP
et en passant cela dans mon vertex shader. Le résultat de ceci est le carré au milieu de l'écran tournant autour de son propre axe, pas par rapport au téléphone.