之前一直使用Vuforia做AR項(xiàng)目漩符,現(xiàn)在新公司用EasyAR做項(xiàng)目侣滩,需要實(shí)現(xiàn)切換攝像頭的功能木西。
1.首先一個(gè)問題是如果使用默認(rèn)前置攝像頭初始化乐埠,在有的機(jī)器上會(huì)出現(xiàn)打不開攝像頭漱竖,或者畫面被縮放的問題禽篱。
同時(shí)有一些奇怪的問題都可以用這種方式規(guī)避(不是解決注意)
一定使用后置攝像頭初始化,如果你需要默認(rèn)前置馍惹,也一定用后置攝像頭初始化躺率,然后馬上切換到前置攝像頭玛界。
2.Easy切換到前置攝像頭畫面會(huì)被翻轉(zhuǎn)的問題
EasyAR 使用數(shù)據(jù)流寫入的方式進(jìn)行攝像機(jī)渲染,導(dǎo)致我在網(wǎng)上找到的一個(gè)翻轉(zhuǎn)攝像機(jī)的代碼水平翻轉(zhuǎn)失效悼吱,但是只要將這個(gè)腳本掛在Camera上不用做任何操作就可以規(guī)避EasyAR切換攝像頭反轉(zhuǎn)的問題(因?yàn)轫?xiàng)目年前上線慎框,暫時(shí)也沒有時(shí)間去查看為什么,算是個(gè)應(yīng)急的解決方案吧)
代碼:
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;
? ? }
}