我正在构建一个非常标准的AR应用程序,它可以覆盖相机上的内容,但在使用SensorManager时遇到了问题。我基本上是尝试从传感器管理器获取旋转矩阵,然后调用glMultMatrix来相应地旋转所有内容。在SensorManager.getRotationMatrix的文档中看起来这是可能的。然而,当我使用旋转矩阵乘法时,一切都变得扭曲和移动,不像你看到其他ar应用程序所期望的那样。下面是我的一些代码:
private float[] gravity = new float[3];
private float[] geomagnetic = new float[3];
private float filteringFactor = 0.01f;
private float[] rotationMatrixOut = new float[16];
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
geomagnetic[0] = event.values[0] * filteringFactor + geomagnetic[0] * (1.0f - filteringFactor);
geomagnetic[1] = event.values[1] * filteringFactor + geomagnetic[1] * (1.0f - filteringFactor);
geomagnetic[2] = event.values[2] * filteringFactor + geomagnetic[2] * (1.0f - filteringFactor);
} else if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
gravity[0] = event.values[0] * filteringFactor + gravity[0] * (1.0f - filteringFactor);
gravity[1] = event.values[1] * filteringFactor + gravity[1] * (1.0f - filteringFactor);
gravity[2] = event.values[2] * filteringFactor + gravity[2] * (1.0f - filteringFactor);
}
SensorManager.getRotationMatrix(rotationMatrixOut, null, gravity, geomagnetic);
}我也尝试过使用SensorManager.remapCoordinateSystem,但没有成功。我的绘图代码如下,这是非常标准的东西,我注释掉了lookat,因为我不确定这是不是造成了麻烦
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
//GLU.gluLookAt(gl, mCamera.position.x, mCamera.position.y, mCamera.position.z,
// mCamera.target.x, mCamera.target.y, mCamera.target.z,
// mCamera.up.x, mCamera.up.y, mCamera.up.z);
gl.glMultMatrixf(rotationMatrixOut, 0);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glLineWidth(1.0f);
gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
gl.glDrawArrays(GL10.GL_LINES, 0, 2 * 201 * 2);我为此失眠太多了,如果有人能帮上忙的话,我会非常感激的。谢谢
发布于 2011-09-01 21:14:37
只是猜测,但可能是,您从SensorManager收到的数据是按行主序排列的吗?OpenGL要求数据按列的主序排列,所以如果您有一个传递给OpenGL的行主序矩阵,那么它会被解释为转置。
你是对的,你不需要gluLookAt在那里(假设你,即设备在原点,并显示它周围的世界)。
https://stackoverflow.com/questions/7269424
复制相似问题