有没有办法稳定增强图像上的 3D 对象

Is there a way to stabilize the 3D object on the Augmented Image

我正在设置场景并需要我的对象出现在增强图像的一角。

我创建了一个脚本来查找增强图像并将其设置为锚点。 domPrefab 在锚的位置实例化

            if (image.TrackingState == TrackingState.Tracking && visualizer == null)
            {
                //First: detect the augmented image

                Anchor imageAnchor = image.CreateAnchor(image.CenterPose);
                visualizer = Instantiate(AugmentedImageVisualizerPrefab, imageAnchor.transform, imageAnchor);
                visualizer.Image = image;
                m_Visualizers.Add(image.DatabaseIndex, visualizer);

                //Second: Instantiate the prefabs

            GameObject prefab = domPrefab;
            var domObject = Instantiate(prefab, anchor.transform.position, anchor.transform.rotation);
            domObject.transform.Rotate(0, k_ModelRotation, 0, Space.Self);
            domObject.transform.SetParent(anchor.transform, true);
            }

我希望 domPrefab 实例化在增强图像的中心,当我将学习如何将它放置在角落时,然后让 domPrefab 出现在图像的角落。

实际结果是:domPrefab出现在图像中间,但不稳定。当相机环顾四周时,它会移动一点,并且它的比例会发生变化。

因为您要使用这条线在图像中心创建锚点

Anchor imageAnchor = image.CreateAnchor(image.CenterPose);

然后在 imageAnchor 位置实例化您的可视化器,然后尝试旋转移动或其他东西,但您可以在 AugmentedImageVisualizer 中执行此操作。为此

  1. 创建一个空对象并将 AugmentedImageVisualizer 脚本附加到它。
  2. AugmentedImageVisualizer
  3. 中创建 public GameObject myModel
  4. 将您的模型作为此对象的子对象并将其拖动到检查器中的 myModel
  5. 使用此对象创建预制件
  6. 像这样修改你的AugmentedImageVisualizer

    public AugmentedImage Image;
    public GameObject myModel;
    
    public void Update()
    {
    
        float halfWidth = Image.ExtentX / 2;
        float halfHeight = Image.ExtentZ / 2;
    
        // for upper left
        myModel.transform.localPosition = (halfWidth * Vector3.left) + (halfHeight * Vector3.back);
        //for upper right
        myModel.transform.localPosition = (halfWidth * Vector3.right) + (halfHeight * Vector3.back);
        //for lower left
        myModel.transform.localPosition = (halfWidth * Vector3.left) + (halfHeight * Vector3.forward);
        //for lower right
        myModel.transform.localPosition = (halfWidth * Vector3.right) + (halfHeight * Vector3.forward);
    
    }
    
  7. 在您的 AugmentedImageExampleController

  8. 中将其用作 AugmentedImageVisualizer

如果你想让它稳定不随时间改变位置,在Start而不是Update或在另一个函数中进行第五步的操作,并确保它只运行一次.

希望对您有所帮助,祝您好运!