有没有办法稳定增强图像上的 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
中执行此操作。为此
- 创建一个空对象并将
AugmentedImageVisualizer
脚本附加到它。
- 在
AugmentedImageVisualizer
中创建 public GameObject myModel
- 将您的模型作为此对象的子对象并将其拖动到检查器中的
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);
}
在您的 AugmentedImageExampleController
中将其用作 AugmentedImageVisualizer
如果你想让它稳定不随时间改变位置,在Start
而不是Update
或在另一个函数中进行第五步的操作,并确保它只运行一次.
希望对您有所帮助,祝您好运!
我正在设置场景并需要我的对象出现在增强图像的一角。
我创建了一个脚本来查找增强图像并将其设置为锚点。 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
脚本附加到它。 - 在
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); }
在您的
AugmentedImageExampleController
中将其用作
public GameObject myModel
AugmentedImageVisualizer
如果你想让它稳定不随时间改变位置,在Start
而不是Update
或在另一个函数中进行第五步的操作,并确保它只运行一次.
希望对您有所帮助,祝您好运!