如何计算arcore中的视野?

问题描述 投票:1回答:1

在使用arcore时,是否有可用于访问摄像机视野(“FoV”,“视角”)的属性或方法?

从一些实验来看,FoV通常约为60度,但可能这取决于设备硬件。

如果无法直接访问,有没有办法从任何Camera对象属性计算FoV角度,例如视图矩阵?

android arcore
1个回答
2
投票

ARCore库v1.8.0不返回FoV值。相反,您可以使用Camera参数计算它:

val frame = session.update()
val camera = frame.camera
val imageIntrinsics = camera.imageIntrinsics

val focalLength = imageIntrinsics.focalLength[0]
val size = imageIntrinsics.imageDimensions
val w = size[0]
val h = size[1]

val fovW = Math.toDegrees(2 * Math.atan(w / (focalLength * 2.0)))
val fovH = Math.toDegrees(2 * Math.atan(h / (focalLength * 2.0)))

使用Camera2 API的另一个解决方案:

val cameraId = session.cameraConfig.cameraId

val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
val characteristics = cameraManager.getCameraCharacteristics(cameraId)

val maxFocus = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS)
val size = characteristics.get(CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE)
val w = size.width
val h = size.height

val fovW = Math.toDegrees(2 * Math.atan(w / (maxFocus[0] * 2.0)))
val fovH = Math.toDegrees(2 * Math.atan(h / (maxFocus[0] * 2.0)))
© www.soinside.com 2019 - 2024. All rights reserved.