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

时间:2017-11-13 20:00:05

标签: android opengl-es-2.0 arcore

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

您是否必须将模型,视图,投影矩阵相乘以实现此目的?

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

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

这会将物体旋转到面向相机,但是当您向左/向右转45度并放置一个新物体时,它将看起来很平坦,因为它从帧开始的位置是90度。

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

1 个答案:

答案 0 :(得分:3)

您有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"当你四处走动时,总要看着你。

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

  1. 使用(0,0,0)
  2. 周围的顶点创建一个矩形
  3. 使用UVMap将纹理映射到四边形。
  4. 使用将位置乘以MVP矩阵的顶点着色器
  5. 一个工作示例位于QuadRenderer.java。在示例中,使用它就像使用ObjectRenderer类一样。