2017.12.08,補充:上下翻轉(zhuǎn)的情況只出現(xiàn)在安卓端头谜,ios端只存在鏡像問題
項目中需要使用到Vuforia進行手機攝像頭前后切換的功能骏掀,在vuforia sdk中默認的是調(diào)用手機的后置攝像頭,網(wǎng)上查詢到動態(tài)攝像頭切換:
// 停止識別
CameraDevice.Instance.Stop();
// 取消實例化攝像機
CameraDevice.Instance.Deinit();
//實例化相機
if (_isBackCam)
{ CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_FRONT);
}
else
{ CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_BACK);
}
// 開始識別
CameraDevice.Instance.Start();
但是柱告,照做之后發(fā)現(xiàn)場景中的模型位置不太對了:【用一個簡單的demo來說明一下情況】Screenshot_2017-12-07-16-18-56-997_com.Test.Demo.png
在網(wǎng)上查也沒找到什么解決方案截驮,vuforia社區(qū)也有老外問這種情況,說要關(guān)閉vuforia的鏡像际度,然鵝......我也沒有找到
問題是要解決的葵袭,找不到就只能自己寫了唄,根據(jù)看到的情況分析:UI是沒有影響的乖菱,所以不用管它坡锡,所以只需要給場景中的物體進行一定的旋轉(zhuǎn)對稱就可以恢復(fù)至正常狀態(tài),根據(jù)看到的情況窒所,首先需要繞著z軸正方向旋轉(zhuǎn)180度鹉勒,然后位置也需要進行修改:上下翻轉(zhuǎn)【自身位置坐標(biāo):y=-y】,最后發(fā)現(xiàn)前置攝像頭的時候吵取,物體是鏡像禽额,所以只需要將自身大小坐標(biāo):x=-x即可。
場景中可能不止一個物體皮官,所以新建一個列表脯倒,將需要重置的物體添加進去,然后翻轉(zhuǎn)時候?qū)@個列表進行遍歷操作即可
List<GameObject> _needRestorationObj = new List<GameObject>(); //放入需要復(fù)位的gameobject
bool _isBackCam = true捺氢;//判斷是否是后置攝像頭藻丢,開始為true
修改后的代碼:
private void OverturnCam(){
for (int i = 0; i < _needRestorationObj.Count; i++)
{
//旋轉(zhuǎn)【繞著z軸正方向旋轉(zhuǎn)180度】
_needRestorationObj[i].transform.RotateAround(_needRestorationObj[i].transform.position, _needRestorationObj[i].transform.forward, 180);
//上下翻轉(zhuǎn)【自身位置坐標(biāo):y=-y】
_needRestorationObj[i].transform.localPosition = new Vector3(_needRestorationObj[i].transform.localPosition.x, -_needRestorationObj[i].transform.localPosition.y, _needRestorationObj[i].transform.localPosition.z);
//左右對稱【自身大小坐標(biāo):x=-x】
_needRestorationObj[i].transform.localScale = new Vector3(-_needRestorationObj[i].transform.localScale.x, _needRestorationObj[i].transform.localScale.y, _needRestorationObj[i].transform.localScale.z);
}
// 停止識別
CameraDevice.Instance.Stop();
// 取消實例化攝像機
CameraDevice.Instance.Deinit();
//實例化相機
if (_isBackCam)
{
CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_FRONT);
}
else
{
CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_BACK);
}
// 開始識別
CameraDevice.Instance.Start();
_isBackCam = !_isBackCam;
}
改進后的效果:
Screenshot_2017-12-07-16-40-50-661_com.Test.Demo.png
【完】