图像总是比大量文字说话,这就是我想要做的:
圆圈中心是用户的手机位置(原点)。该应用程序显示一个自定义相机视图,它还显示一个 OpenGL 场景(取决于您正在查看的位置)。OpenGL 场景仅由一个简单的立方体组成,当用户朝正确的方向看时,立方体就会被渲染。
我对 OpenGL 还是很陌生,我实现了在相机前显示立方体,但它是静态的:我无法在 360° 视图中移动。
我从传感器获得设备的方向:
int type = event.sensor.getType();
float[] data;
if (type == Sensor.TYPE_ACCELEROMETER) {
mGData = data;
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
mMData = data;
} else {
// we should not be here.
return;
}
for (int i=0 ; i<3 ; i++)
data[i] = event.values[i];
SensorManager.getRotationMatrix(mR, mI, mGData, mMData);
SensorManager.getOrientation(mR, mOrientation);
据我了解,3 个同时正交的旋转角度存储在 mOrientation 中。但是然后呢?我想GLU.lookAt(0, 0, 0, X, Y, Z, ?, ?, ?)
在onDrawFrame
方法中制作类似的东西,但没有奏效。我想做那个家伙说他做不到的东西(见这里的最后一段:https ://stackoverflow.com/a/9114246/1304830 )。
这是我在中使用的代码onDrawFram
:
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
// Look in a direction (with the sensors)
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0.0f, 0.0f, 0.0f, ?, ?, ?, ?, ?, ?); // Where I need help
gl.glPushMatrix();
// Place the cube in the scene
gl.glTranslatef(0, 0, -5);
mCube.draw(gl);
谢谢你的帮助