C# 第二个摄影机不以统一方式渲染3D模型

C# 第二个摄影机不以统一方式渲染3D模型,c#,unity3d,camera,augmented-reality,vuforia,C#,Unity3d,Camera,Augmented Reality,Vuforia,我正在创建Unity和Vuforia的AR应用程序。在我的场景中,我有两个摄像头。第一台是ARCamera,第二台是second camera。第二个摄影机从AR摄影机获取其旋转和位置。它只是移动和旋转比AR相机更平滑 我有一个立方体作为ImageTarget的子对象。我想用第二台相机渲染这个立方体。我定义了一个新层为ArcaMinoRelayer,并将第二个摄影机的消隐遮罩设置为ArcaMinoRelayer。此外,我还从AR相机的消隐遮罩字段中取消选中了ARCamIgnoreLayer。 此

我正在创建Unity和Vuforia的AR应用程序。在我的场景中,我有两个摄像头。第一台是ARCamera,第二台是second camera。第二个摄影机从AR摄影机获取其旋转和位置。它只是移动和旋转比AR相机更平滑

我有一个立方体作为ImageTarget的子对象。我想用第二台相机渲染这个立方体。我定义了一个新层为ArcaMinoRelayer,并将第二个摄影机的消隐遮罩设置为ArcaMinoRelayer。此外,我还从AR相机的消隐遮罩字段中取消选中了ARCamIgnoreLayer。 此外,我还向第二个摄影机的目标纹理场添加了一个RenderTexture。我将此渲染纹理设置为平面材质的主纹理。通过这种方式,我将第二台摄像机在这架飞机上所能看到的一切都投射出来

我把这架飞机放在Vuforia的背景平面和AR摄像机之间。通过这种方式,我终于可以在游戏窗口游戏视图中看到AR相机在背景中渲染的东西和第二个相机在前景中渲染的东西

现在我有两个问题。溶解一个意味着溶解另一个

理论上,这两个相机的渲染必须相同;因为我将第二个摄影机的视野设置为与AR摄影机相同的数字。另外,正如我所说的,这两个摄像头的位置和旋转都相同。但它们的渲染不匹配。我不明白它怎么了

为了防止出现第一个问题,我从AR摄影机复制了摄影机组件及其值,并将其粘贴到第二个摄影机。我希望确保第二个摄影机的摄影机组件的所有字段与AR摄影机的摄影机组件的所有字段具有相同的值。然后,我在运行时通过脚本更改了一些值,例如剔除遮罩等。现在,第二个摄影机不渲染任何内容。它只返回纯色。我也不知道这有什么问题

代码如下:

1: 我在更新功能中根据AR摄像机的位置和旋转移动并旋转了第二个摄像机

以下是截图:

1: AR摄像机

2: 第二摄像机

三: 立方体


我解决了。我改变了AR相机的深度。我将AR相机的深度设置为-10。现在,第二个摄影机视口显示在AR摄影机视口的前面。它工作得很好

void CreateSecondCam()
{
    CopyComponent(_aRCam.GetComponent<Camera>(), gameObject);

}



T CopyComponent<T>(T original, GameObject destination) where T : Component
{
    System.Type type = original.GetType();
    var dst = destination.GetComponent(type) as T;
    if (!dst) dst = destination.AddComponent(type) as T;
    var fields = type.GetFields();
    foreach (var field in fields)
    {
        if (field.IsStatic) continue;
        field.SetValue(dst, field.GetValue(original));
    }
    var props = type.GetProperties();
    foreach (var prop in props)
    {
        if (!prop.CanWrite || prop.Name == "name") continue;
        prop.SetValue(dst, prop.GetValue(original, null), null);
    }
    return dst as T;
}
void AssignSomeValues()
    {
        gameObject.GetComponent<Camera>().targetTexture = _chromaKeyRenderTexrture;
        gameObject.GetComponent<Camera>().backgroundColor = _defaultCameraBackgroundColor;
        gameObject.GetComponent<Camera>().cullingMask = 9 << 8;
    }
void Update()
{
    gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, _aRCam.transform.position, _softness * Time.deltaTime);
    gameObject.transform.rotation = Quaternion.Slerp(gameObject.transform.rotation, _aRCam.transform.rotation, _softness * Time.deltaTime);
}