为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
PIPIONE 2022-08-20 15:11:12
我正在设置一个场景,并且需要我的对象出现在增强图像的一角上。我创建了一个脚本来查找增强图像并将其设置为锚点。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出现在图像的中间,但它不稳定。当相机环顾四周时,它会移动一点,它的尺度也会发生变化。
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

因为您正在使用此行在图像中心创建锚点

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

然后在位置实例化可视化工具,然后尝试旋转移动或其他操作,但您可以在 .若要执行此操作imageAnchorAugmentedImageVisualizer

  1. 创建一个空对象并向其附加脚本。AugmentedImageVisualizer

  2. 创建一个 inpublic GameObject myModelAugmentedImageVisualizer

  3. 将模型作为子对象放入此对象,然后将其拖到检查器中。myModel

  4. 使用此对象创建预制件

  5. 修改你的喜欢: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);


}

使用这个,就像在你的AugmentedImageVisualizerAugmentedImageExampleController


如果您希望它保持稳定并且不随时间变化,请在“开始”(而不是“更新”)或其他函数中执行第五步中的操作,并确保它仅运行一次。


我希望这有助于祝你好运!


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信