代码之家  ›  专栏  ›  技术社区  ›  snowrain

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

  •  3
  • snowrain  · 技术社区  · 7 年前

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

    为了实现这一点,你需要增加模型、视图和投影矩阵吗?

    目前我试着使用andy_阴影。obj显示位图,因为它是平面3D对象。但我很难让它面对用户(旋转)并放置在用户点击的地方。

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

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

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   Clayton Wilkinson    7 年前

    你要问两个问题。首先,如何旋转对象以始终注视摄像机。

    我可以通过使用帧的旋转和锚的旋转来实现这一点。在活动中。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);
    

    这会让“安迪”在你走动时一直看着你。

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

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

    一个工作示例位于 QuadRenderer.java