當前我將TangoARScreen腳本附加到Unity中的Tango攝像機預製中,是否可以通過C#腳本檢索Unity中的視場值?如何獲得Unity中的Tango視場
另外,是否可以在Unity中使用前置攝像頭?
當前我將TangoARScreen腳本附加到Unity中的Tango攝像機預製中,是否可以通過C#腳本檢索Unity中的視場值?如何獲得Unity中的Tango視場
另外,是否可以在Unity中使用前置攝像頭?
這當然是可以的dddddddddaxing。
準備好,這裏是你需要做什麼:
讓我們來看看從C API獲取的固有參數託底邏輯的概述。步驟如下:
TangoService_getCameraIntrinsics
函數。將相機的ID和結構的地址傳遞給它。例如,爲了獲得彩色攝像機內部函數:
TangoCameraIntrinsics ccIntrinsics;
TangoService_getCameraIntrinsics(TANGO_CAMERA_COLOR, &ccIntrinsics);
功能填充具有內在的信息結構。
對於C#專門在使用統一這應該是這個樣子:
Tango.VideoOverlayProvider
類的GetIntrinsics
方法。該方法用固有信息填充結構。
現在你可以看看使用Intrinsics從焦距計算FOV。
您可以從API中檢索所有需要計算FOV的參數。
///參數///說明
///寬度///上像素表示的圖像傳感器上的圖像的寬度。
///高度///圖像傳感器上圖像的高度,以像素爲單位。
/// fx ///焦距,x軸,以像素爲單位。
/// fy ///焦距,y軸,以像素爲單位。
請注意,在大多數系統中,fx = fy。
例如,讓我們來看看這在C:
TangoCameraIntrinsics ccIntrinsics;
TangoService_getCameraIntrinsics(TANGO_CAMERA_COLOR, &ccIntrinsics);
當您檢查ccIntrinsics
結構,你應該像下面的數據:
ccIntrinsics.height=720;
ccIntrinsics.fy=1042.0;
因此:
Vertical FOV = 2*atan(0.5*720.0/1042.0) = 2*19.0549 deg = 38.1098 deg
個爲的視圖的水平和垂直視場的公式爲:
///水平FOV = 2 * ATAN(0.5 *寬度/ FX)
///垂直FOV = 2 * ATAN(0.5 *高度/ Fy)
如果您的渲染引擎僅支持一個FOV值,請參閱其文檔以瞭解要使用哪個FOV。如果需要的視場角,該方程爲:
///對角線FOV = 2 *反正切(SQRT((寬度/ 2FX)^ 2 +(高度/ 2FY)^ 2))
相機中的鏡頭不完美,並添加了一些失真。對於大多數使用情況來說,效果足夠小,可以忽略;然而,當Tango設備被校準時,它會檢查並存儲失真信息,這些值可在TangoCameraIntrinsics
結構(C和Unity)中找到。
如果使用運動跟蹤相機(有時稱爲「魚眼」透鏡),則"FOV" distortion model的使用量和TangoCameraIntrinsics
結構/對象將包含校準類型TANGO_CALIBRATION_EQUIDISTANT
。
如果使用彩色攝像機,則polynomial distortion model的使用量和TangoCameraIntrinsics
結構/對象將包含校準類型TANGO_CALIBRATION_POLYNOMIAL_3_PARAMETERS
。
對於一些進一步的深度,看看在VideoOverlayProvider.cs腳本上的Git here
第二QUESTION-
訪問前置攝像頭會要求你放棄從TangoCore
探戈功能和斷開服務。您可以通過強制TangoUx
包和重新定位來重新啓用此中間應用程序,但是您將失去運動跟蹤功能,除非您的應用程序正在使用區域學習功能,否則這可能會使最終用戶感到困惑。 如果我沒有記錯,您可以通過TangoMultiCamera
Prefab上Inspector中的下拉列表選擇此項。
非常感謝您的回答!但是我不太確定C#中的計算,例如垂直FOV,atan會返回-pi/2到pi/2之間的值,而視圖的範圍是0到pi,如果垂直FOV增加pi/2被映射到正確的範圍內? – dddddddaxing