我希望能够让安卓传感器与OpenGL配合使用,以便将OpenGL相机旋转到手机指向的方向。
更具体地说,如果玩家正在朝东看,我希望OpenGL相机也指向东方;如果玩家指向天空,我希望将OpenGL相机指向天空,以此类推。
我已经尝试使用getRotationMatrix
并将矩阵加载到OpenGL上,但它只对上下方向起作用,如果我将手机转向两侧,则没有任何区别。以下是我目前所做的(应用程序处于横屏模式):
public void onSensorChanged(SensorEvent evt) {
int type=evt.sensor.getType();
float alpha = 0.8f;
//Smoothing the sensor data a bit
if (type == Sensor.TYPE_MAGNETIC_FIELD) {
geomag[0]=geomag[0]*alpha+evt.values[0]*(1-alpha);
geomag[1]=geomag[1]*alpha+evt.values[1]*(1-alpha);
geomag[2]=geomag[2]*alpha+evt.values[2]*(1-alpha);
} else if (type == Sensor.TYPE_ACCELEROMETER) {
gravity[0]= gravity[0]*alpha+evt.values[0]*(1-alpha);
gravity[1]= gravity[1]*alpha+evt.values[1]*(1-alpha);
gravity[2]= gravity[2]*alpha+evt.values[2]*(1-alpha);
}
if ((type==Sensor.TYPE_MAGNETIC_FIELD) || (type==Sensor.TYPE_ACCELEROMETER)) {
rotationMatrix = new float[16];
SensorManager.getRotationMatrix(rotationMatrix, null, gravity, geomag);
SensorManager.remapCoordinateSystem(
rotationMatrix,
SensorManager.AXIS_Y,
SensorManager.AXIS_MINUS_X,
rotationMatrix );
if (AOGLRenderer.rotationmatrix==null) AOGLRenderer.rotationmatrix = new float[16];
AOGLRenderer.rotationmatrix = rotationMatrix;
}
}
在OpenGL代码中:
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | // OpenGL docs.
GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
if (rotationmatrix!=null) gl.glLoadMatrixf(rotationmatrix, 0);
gl.glPushMatrix();
gl.glTranslatef(0, 0, -70);
g.draw(gl);
gl.glPopMatrix();
alpha+=2f;
gl.glTranslatef(0, -15, 0);
c.draw(gl);
我希望有人能分享他们实际编写的代码!我非常感激!谢谢大家!