簡體   English   中英

如何在Unity中獲得探戈視場

[英]How to get Tango field of view in Unity

目前我將TangoARScreen腳本附加到Unity中的Tango攝像機預制件上,是否可以通過C#腳本在Unity中檢索視場值?

另外,可以在Unity中使用前置攝像頭嗎?

ddddddddaxing當然是可能的。

准備好,這是您需要做的:

讓我們看一下從C API檢索固有參數的基本邏輯概述。 這些步驟是:

  1. 創建一個TangoCameraIntrinsics結構。
  2. 調用TangoService_getCameraIntrinsics函數。 將相機的ID和結構的地址傳遞給它。

例如,要獲取彩色相機的內部特性:

TangoCameraIntrinsics ccIntrinsics;
TangoService_getCameraIntrinsics(TANGO_CAMERA_COLOR, &ccIntrinsics);

該函數使用內部信息填充結構。

對於專門在Unity中使用的C#,它應該看起來像這樣:

  1. 創建一個TangoCameraIntrinsics結構對象。
  2. 調用Tango.VideoOverlayProvider類的GetIntrinsics方法。

該方法使用內部信息填充結構。

現在,您可以看一下使用內在函數根據焦距計算FOV。

可以從API檢索計算FOV所需的所有參數。

///參數///說明

/// width ///圖像傳感器上圖像的寬度(以像素為單位)。

/// height ///圖像傳感器上圖像的高度(以像素為單位)。

/// 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 * arctan(sqrt((width / 2Fx)^ 2 +(height / 2Fy)^ 2))

相機中的鏡頭並不完美,會增加一定程度的失真。 在大多數情況下,效果很小,可以忽略不計; 但是,在對Tango設備進行校准后,它將檢查並存儲失真信息,並且這些值在TangoCameraIntrinsics結構(C和Unity)中可用。

如果使用運動跟蹤相機(有時稱為“魚眼鏡頭” ),則使用“ FOV”畸變模型 ,並且TangoCameraIntrinsics結構/對象將包含校准類型TANGO_CALIBRATION_EQUIDISTANT

如果您使用的是彩色相機,則將使用多項式失真模型 ,並且TangoCameraIntrinsics結構/對象將包含校准類型TANGO_CALIBRATION_POLYNOMIAL_3_PARAMETERS

有關更多信息,請在此處查看Git上的VideoOverlayProvider.cs腳本。

第二個問題-

訪問前置攝像頭將需要您放棄Tango功能並斷開TangoCore服務的連接。 您可以通過強制TangoUx程序包並重新定位來重新啟用此中間應用程序,但是您將失去運動跟蹤,並且除非您的應用程序正在使用區域學習,否則這可能會使最終用戶感到困惑。 如果我TangoMultiCamera話,您可以通過TangoMultiCamera Prefab上的檢查器中的下拉列表選擇它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM