Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity-移动设备摄像头已镜像_C#_Canvas_Unity3d_Camera - Fatal编程技术网

C# Unity-移动设备摄像头已镜像

C# Unity-移动设备摄像头已镜像,c#,canvas,unity3d,camera,C#,Canvas,Unity3d,Camera,我发现了大量类似的问题,但没有一个是最新的或似乎有效的修复方法。我想自己做这件事,而不是使用资产 我正在创建一个纵向模式的增强现实系统,您可以使用前后摄像头。我已经修复了摄像头的旋转问题,但iOS后摄像头是镜像的(如果我从左侧移动手指,它会从摄像头的右侧移动),android前摄像头是相同的,但后摄像头没有问题 设备摄影机提要放置在画布下的ui图像对象上,画布上应用了平面网格。我还尝试将其作为平面和原始图像进行处理 现在,我的画布直接绑定到unity游戏相机,画布上有一个图像对象,用于播放设备相

我发现了大量类似的问题,但没有一个是最新的或似乎有效的修复方法。我想自己做这件事,而不是使用资产

我正在创建一个纵向模式的增强现实系统,您可以使用前后摄像头。我已经修复了摄像头的旋转问题,但iOS后摄像头是镜像的(如果我从左侧移动手指,它会从摄像头的右侧移动),android前摄像头是相同的,但后摄像头没有问题

设备摄影机提要放置在画布下的ui图像对象上,画布上应用了平面网格。我还尝试将其作为平面和原始图像进行处理

现在,我的画布直接绑定到unity游戏相机,画布上有一个图像对象,用于播放设备相机提要。因为平面和图像对象都是单面的,如果我翻转它,我只会得到一个黑屏。我需要镜像设备的摄像头,而不是游戏对象,我不知道如何做到这一点

public GameObject CamFeedObj;
WebCamTexture webcam;
WebCamDevice[] devices;

void Start()
{
    platform = Application.platform;
    devices = WebCamTexture.devices;
    webcam = new WebCamTexture(devices[0].name);
    CamFeedObj.GetComponent<MeshRenderer>().material.mainTexture = webcam;

    // Fixes rotation issue
    if(platform == RuntimePlatform.IPhonePlayer){
        CamFeedObj.transform.eulerAngles = new Vector3(0,-90,90);
    }
    webcam.Play();
}
公共游戏对象CamFeedObj;
网络摄像机;
网络摄像机设备[]设备;
void Start()
{
平台=Application.platform;
设备=WebCamTexture.devices;
webcam=新的WebCamTexture(设备[0]。名称);
CamFeedObj.GetComponent().material.mainTexture=网络摄像头;
//修复了轮换问题
if(platform==RuntimePlatform.IPhonePlayer){
camfeedbj.transform.eulerAngles=新向量3(0,-90,90);
}
webcam.Play();
}

您可以创建一个简单的着色器来翻转x坐标。另一个选择是将ui图像的x比例乘以-1


我在Ipad pro上也遇到了同样的问题。我使用的是unity版本2019.2.19f1,xcode 11.3.1

我使用plane渲染摄影机,其变换如下:

我用来翻转的代码片段:

 void OnPreCull()
{
    GetComponent<Camera>().ResetWorldToCameraMatrix();
    GetComponent<Camera>().ResetProjectionMatrix();
    GetComponent<Camera>().projectionMatrix = GetComponent<Camera>().projectionMatrix * Matrix4x4.Scale(new Vector3(1, -1, 1));
}

void OnPreRender()
{
    GL.invertCulling = true;
}

void OnPostRender()
{
    GL.invertCulling = false;
}
void OnPreCull()
{
GetComponent().ResetWorldToCameraMatrix();
GetComponent().ResetProjectionMatrix();
GetComponent().projectionMatrix=GetComponent().projectionMatrix*Matrix4x4.Scale(新向量3(1,-1,1));
}
void OnPreRender()
{
GL.invertCulling=真;
}
void OnPostRender()
{
GL.invertCulling=假;
}

我尝试了-1,它似乎翻转了实际对象,使屏幕变黑。@Nox是否翻转了正确的坐标?用截图更新了我的答案。我试过了,但没用。我用的是Unity 2018.2和Galaxy S7 Edge的牛轧糖。无论我如何缩放或旋转图像,它似乎都是一样的。