我想让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传感器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)