c# - 有没有办法稳定增强图像上的 3D 对象
问题描述
我正在设置一个场景,需要我的对象出现在增强图像的一个角落。
我创建了一个脚本来查找增强图像并将其设置为锚点。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
. 去做这个
- 创建一个空对象并将
AugmentedImageVisualizer
脚本附加到它。 - 创建一个
public GameObject myModel
在AugmentedImageVisualizer
- 将您的模型作为子对象放入该对象并将其拖到
myModel
检查器中。 - 用这个对象创建一个预制件
像这样修改你的
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); }
像
AugmentedImageVisualizer
在你的一样使用它AugmentedImageExampleController
如果您希望它稳定且不随时间改变位置,请在第五步中执行操作,Start
而不是在另一个函数中Update
或在另一个函数中执行,并确保它只运行一次。
我希望这有助于祝你好运!
推荐阅读
- sql - 从 SQL 中的列中删除重复值
- javascript - 如何使用 javascript 将 css-grid 元素放入网格容器中
- c# - 如何转换跨度
到 ASCII 字符串? - python - 如何有条件地从数据框中的两列计算的变量中选择行?
- asp.net-core - 在 .Net Core 中自定义 OAuth CallBackPath 控制器
- python-3.x - 有时会抛出错误的文件描述符错误,有时不会
- html - 如何使用 SourceSansPro 匹配设计跨浏览器
- reactjs - React useEffect() 仅在具有依赖关系的第一次渲染时运行
- multithreading - gsutil 没有 -m 多线程/并行默认行为
- kubernetes - 在 Google Kubernetes Engine 上部署生产就绪的 GitLab 时出现 HTTPError 400