在 ARCore 锚点上放置 2D 位图 Android openGL ES 2.0

Place 2D Bitmap on ARCore anchor Android openGL ES 2.0

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

你必须乘以模型、视图、投影矩阵才能实现吗?

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

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

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

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

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

我能够通过使用框架的旋转与锚点的旋转来做到这一点。在 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);

这将使 "Andy" 在你四处走动时总是看着你。

绘制二维图像的第二部分需要更多代码。高级别:

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

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