Vuforia多相机

3

我有一个设置,想要展示AR场景的一些部分,因此我的计划是使用常规的AR相机,然后在其下添加第二个相机作为子级,带有平面和深度掩码。

ARCamera
 |
 +- Camera <-- Vuforia Prefab
      |
      +- Background Plane
      |
      +- RevealCamera <- My camera
              |
              +- DepthMask Plane

但是这两个摄像机并不同步。我所有的场景几何体都在一个根节点下,不会移动。我观察了场景窗口并进行了验证。我确保两个摄像机具有相同的视锥设置。所以现在唯一可能的原因就是摄像机移动方式不同。为什么会这样?Vuforia是否对其摄像机进行了一些特殊处理?

以下是我用来尝试匹配Vuforia摄像机的代码:

[RequireComponent(typeof(Camera))]

public class FollowMainCamera : MonoBehaviour
{
    public Camera target;
    private Camera _camera;

    void Start()
    {
        _camera = GetComponent<Camera>();
    }

    void Update()
    {
        transform.position = target.transform.position;
        transform.localPosition = target.transform.localPosition;
        transform.rotation = target.transform.rotation;
        transform.localRotation = target.transform.localRotation;

        _camera.fieldOfView = target.fieldOfView;
    }
}
2个回答

2
问题是“投影矩阵”。看起来Vuforia的AR相机使用了自己特定版本的投影矩阵,它定义了如何在屏幕上显示“世界”。试试这个。
void Start()
{
SetProjectionMatrixAndFOV
}

void Update()
{
    overlayCamera.transform.position = Camera.main.transform.position;
    overlayCamera.transform.rotation = Camera.main.transform.rotation;
}


private void SetProjectionMatrixAndFOV()
{
    overlayCamera.fieldOfView = Camera.main.fieldOfView;
    overlayCamera.projectionMatrix = Camera.main.projectionMatrix;
}

projectionMatrix 对我来说是缺失的一部分。Vuforia 和 Unity 计算的不同。 - texel

1

Vuforia相机有一个技巧,就是在运行时更改相机FOV以匹配设备的FOV,因此您需要在运行时更新RevealCamera以匹配ARCamera的FOV。


我会检查的!谢谢! - CaseyB
那不起作用。还是不对,我会编辑我的问题并放上我的代码。 - CaseyB
1
如果你的相机是AR相机的子对象,那么你不需要更新它的位置或旋转,因为这将会自动发生。 - Dover8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接