目前我将TangoARScreen脚本附加到Unity中的Tango相机预制件,是否可以通过C#脚本检索Unity中的视野值?
此外,是否可以在Unity中使用前置摄像头?
答案 0 :(得分:1)
当然可能是ddddddddaxing。
准备好了,这是你需要做的:
让我们看一下从C API中检索内部参数,以获得基础逻辑的一般概述。步骤如下:
TangoService_getCameraIntrinsics
函数。传递相机的ID和结构的地址。例如,要获得彩色相机内在函数:
TangoCameraIntrinsics ccIntrinsics;
TangoService_getCameraIntrinsics(TANGO_CAMERA_COLOR, &ccIntrinsics);
该函数使用内部信息填充结构。
对于专门用于 Unity 的C#,这应该是这样的:
GetIntrinsics
类的Tango.VideoOverlayProvider
方法。该方法使用内部信息填充结构。
现在您可以查看使用内在函数从焦距计算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((宽度/ 2Fx)^ 2 +(高度/ 2Fy)^ 2))
相机中的镜头并不完美,会增加一些失真。对于大多数用例,效果小到可以忽略;但是,当校准Tango设备时,它会检查并存储失真信息,这些值可在TangoCameraIntrinsics
结构(C和Unity)中找到。
如果您正在使用运动追踪相机(有时称为“鱼眼”镜头),则使用"FOV" distortion model和TangoCameraIntrinsics
结构/对象将包含校准类型TANGO_CALIBRATION_EQUIDISTANT
。
如果您使用的是彩色相机,则使用polynomial distortion model,TangoCameraIntrinsics
结构/对象将包含校准类型TANGO_CALIBRATION_POLYNOMIAL_3_PARAMETERS
。
要进一步深入,请查看Git上的VideoOverlayProvider.cs脚本here
第二个问题 -
访问前置摄像头需要您放弃Tango功能并断开与TangoCore
服务的连接。您可以通过强制TangoUx
包并重新定位来重新启用此中间应用程序,但是您将丢失运动跟踪,除非您的应用程序使用区域学习,否则这可能会使最终用户迷失方向。
如果我没记错的话,您可以通过TangoMultiCamera
预制件上的检查器中的下拉列表选择此项。