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