0
我正在构建一个增强现实应用程序,我希望屏幕上的对象相对于手机的方向移动。例如,如果手机保持不动 - 对象停留在屏幕中央。如果手机在纵向模式下绕其垂直轴向左旋转,则该物体向右移动。这是我在访问Android的将旋转矢量应用于OpenGL相机或“查看矩阵”
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
mGLAssetSurfaceView.getRenderer().setRotationMatrix(mRotationMatrix);
}
}
传感器这是我如何应用到我的OpenGL渲染:
@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);
}
正如你所看到的,我计算的产品
MVRP
并将其传递到我的顶点着色器。这样做的结果是屏幕中间的正方形围绕自己的轴旋转,而不是相对于手机。