适用于OpenGL的Android传感器

适用于OpenGL的Android传感器,第1张

概述我想让android传感器与opengl配合使用,将opengl的摄像头旋转到手机所指向的位置.详细说明:如果玩家正在向东看,我也希望opengl的摄像头在游戏中指向东方;如果玩家指向天空,我想将opengl的相机指向天空,依此类推.我尝试过使用getRotationMatrix并在opengl上加载矩阵,但它只适用于上

我想让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.请注意,甚至可能不需要重新映射,例如,当您已将活动修复为横向模式时.更多细节here.

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

> CompassActivity
> How to use onSensorChanged sensor data in combination with OpenGL

总结

以上是内存溢出为你收集整理的适用于OpenGL的Android传感器全部内容,希望文章能够帮你解决适用于OpenGL的Android传感器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1097356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存