android - 在 ARCore anchor Android openGL ES 2.0 上放置 2D Bitmap

标签 android opengl-es-2.0 arcore

如何将 2D 位图放置在始终面向用户(相机)的 ARCore anchor 位置? 我想在用户点击的地方放置一个标记。

是否必须乘以模型、 View 、投影矩阵才能实现此目的?

目前我尝试使用 andy_shadow.obj 来显示位图,因为它是平面 3D 对象。但是我无法让它面向用户(旋转)并将其放置在用户点击的位置。

Matrix.rotateM(mModelMatrix, 0, 90.0f, 1.0f, 0.0f, 0.0f);

这会旋转对象以面向相机,但是当您向左/右旋转 45 度并放置一个新对象时,它看起来会是平的,因为它与框架开始的位置成 90 度。

也许可以在 openGL 中的屏幕 UI 上放置一个 2D 对象?

最佳答案

您要问 2 个问题。首先,如何旋转对象以始终注视相机。

我能够通过使用框架的旋转与 anchor 的旋转来做到这一点。在 HelloArActivity.onDrawFrame() 改变

planeAttachment.getPose().toMatrix(mAnchorMatrix, 0);

成为

float translation[] = new float[3];
float rotation[] = new float[4];
planeAttachment.getPose().getTranslation(translation,0);
frame.getPose().getRotationQuaternion(rotation,0);

Pose rotatedPose = new Pose(translation,rotation);
rotatedPose.toMatrix(mAnchorMatrix,0);

这将使“安迪”在您四处走动时始终注视着您。

绘制二维图像的第二部分需要更多代码。在高层次上:

  1. 使用 (0,0,0) 周围的顶点创建一个矩形
  2. 使用 UVMap 将纹理映射到四边形上。
  3. 使用顶点着色器将位置乘以 MVP 矩阵

工作示例位于 QuadRenderer.java .在示例中,就像使用 ObjectRenderer 类一样使用它。

关于android - 在 ARCore anchor Android openGL ES 2.0 上放置 2D Bitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47272547/

相关文章:

java - FileInputStream、FileOutputStream - 检查文件中的特定值/行/字符串

android - 为什么我的点 openGL 着色器程序有 strip 伪像?

android - 运行 ARCore 应用程序需要 ARCore : is arcore-preview. apk(= Tango Core 应用程序)?

android - 如何获取Android平台上安装的应用的更新历史

android - 为什么我的 this.setState 在函数中不起作用?

java - OpenGL ES 2.0 与 1.1

java - ARCore——读取叠加图像(AR场景截图)

java - 华为P Smart 2019手机中的虚拟陀螺仪?

android - 如何使用 Firebase + Android 应用邀请某些用户(例如用户 B、C)查看+更新用户 A 创建的数据

c++ - 如何使用 C++ native 代码链接到 Android Studio 项目中的 GLES2