【问题标题】:ARSessionOrigin transform position and rotation to make created ARTrackedImage become Unity space zeroARSessionOrigin 变换位置和旋转使创建的 ARTrackedImage 成为 Unity 空间零
【发布时间】:2020-02-22 04:23:54
【问题描述】:

我将ARFoundation 与跟踪图像一起使用(图像库只有一张图像可供查找)。 找到图像后,我将使用

订阅该事件
[SerializeField]
ARTrackedImageManager _arTrackedImageManager;

void Awake()
{
    _arTrackedImageManager.trackedImagesChanged += ImageChangedHandle;
}

void ImageChangedHandle(ARTrackedImagesChangedEventArgs imgChangedArgs)
{
    foreach (var item in imgChangedArgs.added)
    {
        var go = item.gameObject;

        _arkitChecker.DisplayFoundTrackedImage(item);
    }
}

_arkitChecker 是我的带有 DisplayFoundTrackedImage 方法的类的实例:

internal void DisplayFoundTrackedImage(ARTrackedImage targetImageGameObject)
{
    var arOrig = GameObject.FindObjectOfType<ARSessionOrigin>();

    arOrig.transform.Translate(-targetImageGameObject.transform.position, Space.World);

    float babyAngle;
    Vector3 babyAxis;
    targetImageGameObject.transform.rotation.ToAngleAxis(out babyAngle, out babyAxis);

    arOrig.transform.RotateAround(Vector3.zero, babyAxis, -babyAngle);
}

因此我想在创建时进行转换 ARTrackedImage 变成 Unity 空间 Vector3.zeroQuaternion.identity,但在设备上图像没有变化。

我也尝试过 ARSessionOrigin.MakeContentAppearAt,但没有按我的意愿工作:

arOrig.MakeContentAppearAt(targetImageGameObject.transform, Vector3.zero, Quaternion.identity);

【问题讨论】:

    标签: c# unity3d augmented-reality


    【解决方案1】:

    我只需要解决同样的问题,我能够使用ARSessionOrigin MakeContentAppearAt() 方法,使用跟踪图像的位置和旋转(我正在使用 ARFoundation v3.0.0 preview 4)使其工作。

    该方法没有很好地记录,经过反复试验,我发现您需要使用跟踪图像的localRotation,而不是世界空间rotation,否则方向将不正确。

    每当找到或更新跟踪的图像时,我都会运行以下命令:

    void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)
    {
        if(eventArgs.updated.Count > 0)
        {
            ARTrackedImage trackedImage = eventArgs.updated[0];
            arSessionOrigin.MakeContentAppearAt(worldOrigin.transform, trackedImage.transform.position, trackedImage.transform.localRotation);
        }
    }
    

    worldOrigin.transform 只是位置 0,0,0 的空游戏对象,没有旋转。

    所以,这段代码是说:我希望 worldOrigin 变换看起来像通过调整 AR 相机的变换来补偿它位于 trackedImage 位置/旋转(worldOrigin.transform 未修改)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      相关资源
      最近更新 更多