Android 在arcore中对3d对象使用模板遮罩时出现问题

Android 在arcore中对3d对象使用模板遮罩时出现问题,android,opengl-es,arcore,stencil-buffer,Android,Opengl Es,Arcore,Stencil Buffer,我正在使用hello ar java演示在3d对象上使用模具蒙版,但是我遇到了一些意想不到的行为。我的模具遮罩正确地遮挡了平面渲染器,但3d对象(andy)似乎没有预期的反应。相反,如图所示,他似乎被激怒了。我不知道如何解决这个问题。附加的是执行模具掩蔽的代码段 模具图像在平面缓冲区上正常工作,但在三维模型上失败 忘记更新我为此找到的“解决方案”。我没有在3d对象上应用模具遮罩,而是再次渲染背景,但将其穿过模具遮罩。这意味着背景将覆盖3d对象,从而实现所需的“遮罩”效果 GLES20.gl

我正在使用hello ar java演示在3d对象上使用模具蒙版,但是我遇到了一些意想不到的行为。我的模具遮罩正确地遮挡了平面渲染器,但3d对象(andy)似乎没有预期的反应。相反,如图所示,他似乎被激怒了。我不知道如何解决这个问题。附加的是执行模具掩蔽的代码段

模具图像在平面缓冲区上正常工作,但在三维模型上失败

忘记更新我为此找到的“解决方案”。我没有在3d对象上应用模具遮罩,而是再次渲染背景,但将其穿过模具遮罩。这意味着背景将覆盖3d对象,从而实现所需的“遮罩”效果

  GLES20.glClear ( GLES20.GL_STENCIL_BUFFER_BIT );
  GLES20.glEnable(GLES20.GL_STENCIL_TEST);
  GLES20.glColorMask(false, false, false, false);
  GLES20.glDepthMask(false);
  GLES20.glStencilFunc(GLES20.GL_NEVER, 1, 0xFF);
  GLES20.glStencilOp(GLES20.GL_REPLACE, GLES20.GL_KEEP, GLES20.GL_KEEP);
  GLES20.glStencilMask(0xFF);
  GLES20.glClear(GLES20.GL_STENCIL_BUFFER_BIT);

  // controls how pixels are rendered in the stencil mask
  quadDrawer.draw();

  GLES20.glColorMask(true, true, true, true);
  GLES20.glDepthMask(true);
  GLES20.glStencilMask(0xFF);
  GLES20.glStencilFunc(GLES20.GL_EQUAL, 0, 0xFF);

  // Visualize planes.
  // reacts correctly to the stencil mask
  planeRenderer.drawPlanes(
      session.getAllTrackables(Plane.class), camera.getDisplayOrientedPose(), projmtx);

  // Visualize anchors created by touch.
  float scaleFactor = 1.0f;

  for (ColoredAnchor coloredAnchor : anchors) {
    if (coloredAnchor.anchor.getTrackingState() != TrackingState.TRACKING) {
      continue;
    }
    // Get the current pose of an Anchor in world space. The Anchor pose is updated
    // during calls to session.update() as ARCore refines its estimate of the world.
    coloredAnchor.anchor.getPose().toMatrix(anchorMatrix, 0);

    // Update and draw the model and its shadow.
    // does not react correctly to the 
    virtualObject.updateModelMatrix(anchorMatrix, scaleFactor);
    virtualObjectShadow.updateModelMatrix(anchorMatrix, scaleFactor);
    virtualObject.draw(viewmtx, projmtx, colorCorrectionRgba, coloredAnchor.color);
    virtualObjectShadow.draw(viewmtx, projmtx, colorCorrectionRgba, coloredAnchor.color);
  }

  GLES20.glDisable(GLES20.GL_STENCIL_TEST);