之前一直使用Vuforia做AR项目,现在新公司用EasyAR做项目,需要实现切换摄像头的功能。
1.首先一个问题是如果使用默认前置摄像头初始化,在有的机器上会出现打不开摄像头,或者画面被缩放的问题。
同时有一些奇怪的问题都可以用这种方式规避(不是解决注意)
一定使用后置摄像头初始化,如果你需要默认前置,也一定用后置摄像头初始化,然后马上切换到前置摄像头。
2.Easy切换到前置摄像头画面会被翻转的问题
EasyAR 使用数据流写入的方式进行摄像机渲染,导致我在网上找到的一个翻转摄像机的代码水平翻转失效,但是只要将这个脚本挂在Camera上不用做任何操作就可以规避EasyAR切换摄像头反转的问题(因为项目年前上线,暂时也没有时间去查看为什么,算是个应急的解决方案吧)
代码:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Camera))]
public class MirrorFlipCamera : MonoBehaviour
{
new Camera camera;
public bool flipHorizontal;
public bool flipVertical;
void Awake()
{
camera = GetComponent<Camera>();
}
void OnPreCull()
{
camera.ResetWorldToCameraMatrix();
camera.ResetProjectionMatrix();
Vector3 scale = new Vector3(flipHorizontal ? -1 : 1, flipVertical ? -1 : 1, 1);
camera.projectionMatrix = camera.projectionMatrix * Matrix4x4.Scale(scale);
}
void OnPreRender()
{
GL.invertCulling = flipHorizontal;
}
void OnPostRender()
{
GL.invertCulling = false;
}
}