gpt4 book ai didi

用于 OpenGL 的 Android 传感器

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:53 26 4
gpt4 key购买 nike

我想让 android 传感器与 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);

我希望真正做到这一点的人可以分享他们的代码!我真的很感激!谢谢大家!

最佳答案

您为倾斜矩阵提供了 null - 这是不正确的。

SensorManager.getRotationMatrix(rotationMatrix, null, gravity, geomag);

有很多关于如何使用 SensorManager 的 getRotationMatrix(...) 的示例。

float[] R = new float[16];
float[] I = new float[16];

if (SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticValues)) {
float[] anglesInRadians = new float[3];
SensorManager.getOrientation(R, anglesInRadians);
...
}

此外,“将 opengl 的摄像头旋转到手机指向的任何地方”也相当含糊。例如,如果您指的是某种增强现实方法,那么您应该将 AXIS_X 映射到 AXIS_Z。请注意,重新映射甚至可能不是必需的,例如当您已经将 Activity 固定为横向模式时。更多详情 here .

一些涉及传感器数据和 OpenGL ES 的示例代码:

关于用于 OpenGL 的 Android 传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com