适用于 OpenGL 的 Android 传感器

2023-12-13

我想让 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);
    ...
}

Also "将opengl的相机旋转到手机指向的任何地方“是相当模糊的。例如,如果你的意思是某种增强现实方法,那么你应该映射AXIS_X to AXIS_Z。请注意,甚至可能不需要重新映射,例如当您已经将 Activity 固定为横向模式时。更多细节here.

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

  • CompassActivity
  • 如何结合OpenGL使用onSensorChanged传感器数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 OpenGL 的 Android 传感器 的相关文章

随机推荐

  • 我想在Android中使用Xpath来解析XML

    我喜欢在java中使用Xpath解析XML 但是当我在android上做同样的事情时 找不到XPath 任何想法如何实施 如果不可能的话 还有其他更快的 Android 解析器吗 Thanks Kai Android XPath 自 And
  • 获取外键值

    如何获取外键值 我有一个常见的车辆模型 它链接到年份 系列 发动机类型 车身样式 变速箱和传动系统 全部作为外键 我想获取我的应用程序的这些字段的值 但我不知道如何处理它们 任何想法都将受到高度赞赏 class Model models M
  • 完美滚动条默认滚动条保留,并且“完美滚动条”不起作用

    我真的需要这方面的帮助 我想用 完美滚动条 替换 iframe 上的默认滚动条 我已经下载了完美的滚动条 我还将所需的文件包含到我的 html 文档中 根据文档 我在 iframe 中设置了内容容器的样式 结果是 当我加载主页并将鼠标光标移
  • 如何在 1 次后停止 gif 反应本机?

    我有一个 gif 正在反应 我想停止循环 我在我的视图中添加了一个图像 我给图像提供了我的 gif 的路径 它可以工作 但是 gif 进入无限循环 有什么办法停下来吗
  • 如何使用 AVR 的 gnu 汇编器相对于 PC 跳转?

    我有一个使用 avr objcopy 反汇编的二进制文件 中断向量表如下所示 00000000 VECTOR TABLE 0 13 c0 rjmp 38 0x28 RESET 2 b8 c1 rjmp 880 0x374 INT0 4 fd
  • xmlns 属性不允许我解析[重复]

    这个问题在这里已经有答案了 过去一小时我一直在尝试解析这个 XML 文件
  • 简单检查 Android 应用程序后台

    我通过从每个活动的 onResume 调用 plusActivity 和从 onPause 调用 minusActivity 来跟踪我的应用程序中当前可见的活动数量 应该是 0 或 1 plus minusActivity 位于我的 myA
  • 如何检查 Android 是否安装了 Facebook

    我正在修改我的应用程序 以便能够捕获用户在未安装 facebook 应用程序 SSO 所需 的情况下尝试发布的情况 这是我正在使用的代码 try ApplicationInfo info getPackageManager getAppli
  • Firebase 存储 downloadURL 文件结构

    所以我使用 firebase 存储来上传我的网站文件 这是目录结构的示例 Project index html css style css js mainScript js 因此 我以这种结构将这些文件上传到 firebase 但我注意到返
  • Php数组数组从名称获取id

    我在 PHP 中有一个如下所示的数组 my array array my array array id gt myid1 name gt myname1 my array array id gt otherid name gt othern
  • 新款 iPhone X 型号有哪些尺寸级别?

    Apple 推出了三款新 iPhone X 机型 iPhone XR XS 和 XS Max 它们的尺寸类别是什么 与其他 iPhone 型号相比如何 我将为每个型号提供三条信息 纵向时的尺寸类别 横向时的尺寸类别以及屏幕分辨率 means
  • 在简单的Python脚本中列出超出范围的索引

    我刚刚开始学习 Python 想要创建一个简单的脚本 从用户输入中读取整数并打印它们的总和 我写的代码是 inflow list map int input split result 1 for i in inflow result inf
  • 付款捕获后调用 Magento 事件观察者

    我试图在订单创建后并在捕获付款后调用观察者 到目前为止我已经尝试过了 checkout submit all after sales order payment place end sales order place after 销售 订单
  • 如何设置段落字符限制?

    我目前有 p event desc p 其中给出了事件的完整描述 有些有很长的描述 而我只想要前 50 个字符 如何才能实现这一目标 尝试这个 fifty chars width 50ch overflow hidden white spa
  • 动画 GIF 帧速率似乎低于预期

    我有一个winforms应用程序 上面有一个 gif 用于让用户了解停滞的进程 问题是它的播放速度比其他应用程序 chrome internet explorer 慢得多 我已经尝试过 gif 了PictureBox and Label但结
  • 在 C# 中,类中的析构函数和 Finalize 方法有什么区别?

    类中的析构函数和 Finalize 方法之间有什么区别 如果有 我最近发现 Visual Studio 2008 认为析构函数与 Finalize 方法同义 这意味着 Visual Studio 不允许您在类中同时定义这两种方法 例如下面的
  • 使用 HttpWebRequest 时,为什么我在某些链接上收到“(304) Not Modified”错误?

    任何想法为什么在我尝试使用 HttpWebRequest 访问的某些链接上我收到 远程服务器返回错误 304 未修改 在代码中 我使用的代码来自杰夫的帖子在这里 该页面似乎消失了 请参阅在 Wayback Machine 上存档副本 请注意
  • Django Apache 错误:没有名为“encodings”的模块。 Windows Server 2008 R2 标准版

    我从 git 克隆 repo 我创建 venv python m venv myenv myenv scripts activate bat pip install r requirements txt pip install mod ws
  • 如何销毁在angular2中使用DynamicComponentLoader创建的所有组件?

    嗨 我发现了一篇关于使用动态组件加载器和处置方法添加和删除组件的帖子 我想一次性销毁所有创建的组件 我有笨蛋demo以及我找到演示的来源Angular 2 动态添加 删除组件 我知道我想存储所有componentref在一个数组中 然后迭代
  • 适用于 OpenGL 的 Android 传感器

    我想让 android 传感器与 opengl 一起工作 将 opengl 的相机旋转到手机指向的任何地方 详细说明一下 如果玩家正在看东方 我希望 opengl 的相机在游戏中也指向东方 如果玩家指向天空 我想将opengl的相机指向天空