如何将 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);
这将使“安迪”在您四处走动时始终注视着您。
绘制二维图像的第二部分需要更多代码。在高层次上:
- 使用 (0,0,0) 周围的顶点创建一个矩形
- 使用 UVMap 将纹理映射到四边形上。
- 使用顶点着色器将位置乘以 MVP 矩阵
工作示例位于 QuadRenderer.java .在示例中,就像使用 ObjectRenderer 类一样使用它。
关于android - 在 ARCore anchor Android openGL ES 2.0 上放置 2D Bitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47272547/