目前我将 TangoARScreen 脚本附加到 Unity 中的 Tango 相机预制件中,是否可以通过 C# 脚本在 Unity 中检索视野值?
另外,Unity中是否可以使用前置摄像头?
目前我将 TangoARScreen 脚本附加到 Unity 中的 Tango 相机预制件中,是否可以通过 C# 脚本在 Unity 中检索视野值?
另外,Unity中是否可以使用前置摄像头?
这当然是可能的 ddddddddaxing。
准备好,这是你需要做的:
让我们看一下从 C API 中检索内部参数,以大致了解基础逻辑。步骤是:
TangoService_getCameraIntrinsics
函数。将相机的 ID 和结构的地址传递给它。例如,要获取彩色相机内在函数:
TangoCameraIntrinsics ccIntrinsics;
TangoService_getCameraIntrinsics(TANGO_CAMERA_COLOR, &ccIntrinsics);
该函数使用内在信息填充结构。
对于专门在Unity中使用的 C#,它应该如下所示:
GetIntrinsics
方法Tango.VideoOverlayProvider
。该方法用内在信息填充结构。
现在您可以查看使用 Intrinsics 从焦距计算 FOV。
计算 FOV 所需的所有参数都可以从 API 中检索。
/// 参数 /// 说明
/// 宽度 /// 图像传感器上图像的宽度,以像素为单位。
/// 高度 /// 图像传感器上图像的高度,以像素为单位。
/// 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 * width / Fx)
/// 垂直 FOV = 2 * atan(0.5 * height / 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
Prefab 的 Inspector 中的下拉列表来选择它。