C# 第二个摄影机不以统一方式渲染3D模型
我正在创建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: 第二摄像机 三: 立方体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。 此
我解决了。我改变了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);
}