Table of Contents

Class MotionTrackerFrameSource

命名空间
easyar
程序集
EasyAR.Sense.dll

在场景中控制easyar.MotionTrackerCameraDeviceMonoBehaviour,在Unity环境下提供功能扩展。

这个frame source是一种运动跟踪设备,在ARSession中会输出运动数据。

public class MotionTrackerFrameSource : FrameSource
继承
MotionTrackerFrameSource
继承成员

属性

Camera

仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。

在桌面设备或手机上,该相机代表现实环境中相机设备在虚拟世界中对应的Camera,其投影矩阵和位置都将与真实相机对应,受EasyAR控制。在头显上,该相机仅用于将一些诊断文字展示在眼前,不用于画面渲染,相机也不受EasyAR控制。

protected override Camera Camera { get; }

CameraCandidate

Camera的备选,仅当未使用Unity XR Origin时有效,如未设置会使用Camera.main。

public Camera CameraCandidate { get; set; }

CameraFrameStarted

仅当创建一个新的frame source时提供。它会在ARSession的整个生命周期内被访问。

相机帧是否开始输入。

protected override bool CameraFrameStarted { get; }

DesiredFocusMode

期望的对焦模式,在DeviceOpened事件或OnEnable前修改才有效。

注意:受硬件或系统限制,对焦开关在一些设备上可能无效。

public Optional<MotionTrackerCameraDeviceFocusMode> DesiredFocusMode { get; set; }

DesiredFrameRate

期望的设备帧率,在DeviceOpened事件或OnEnable前修改才有效。

public Optional<MotionTrackerCameraDeviceFPS> DesiredFrameRate { get; set; }

DesiredMinQualityLevel

期望的最低允许的质量级别,在Assemble()前修改才有效。

public Optional<MotionTrackerCameraDeviceQualityLevel> DesiredMinQualityLevel { get; set; }

DesiredResolution

期望的分辨率,在DeviceOpened事件或OnEnable前修改才有效。

如果在FrameRecorder录制过程中修改了图像大小,录制数据将停止更新,需要关闭之后重新录制。

public Optional<MotionTrackerCameraDeviceResolution> DesiredResolution { get; set; }

DesiredTrackingMode

期望的跟踪模式,在session启动前修改才有效。

public Optional<MotionTrackerCameraDeviceTrackingMode> DesiredTrackingMode { get; set; }

DeviceCameras

仅当创建一个新的frame source时提供。它会在CameraFrameStarted为true时被访问。

提供相机帧数据的设备相机。如果相机帧数据由多个相机提供,列表中需要包含所有相机。

确保在CameraFrameStarted为true时数值正确。

protected override List<FrameSourceCamera> DeviceCameras { get; }

DeviceQualityLevel

获取设备上Motion Tracking的质量,结合应用场景,可以通过此值判断是否启动Motion Tracking。

public static MotionTrackerCameraDeviceQualityLevel DeviceQualityLevel { get; }

Display

仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。

提供显示系统信息。你可以使用DefaultSystemDisplayDefaultHMDDisplay来获取默认的显示信息。

protected override IDisplay Display { get; }

FrameRateRange

帧率范围。仅在Opened为true时可用。

public Vector2 FrameRateRange { get; }

IsAvailable

仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。

当前frame source是否可用。

如果数值等于null,CheckAvailability()会被调用,数值将在Coroutine结束后获取。

protected override Optional<bool> IsAvailable { get; }

IsCameraUnderControl

仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。

当值为ture时,session 会更新相机的transform,且会渲染相机图像.

在创建头显扩展时,它应为false。你应该完全控制场景中的3D相机。你应该处理相机渲染,尤其是在VST模式下。

protected override bool IsCameraUnderControl { get; }

IsHMD

仅当创建一个新的frame source时提供。它仅会在Assemble()过程中被访问。

当前frame source是否是头显。如果是头显,诊断信息将显示在相机前的3D板子上。

部分frame filter在设备上运行会有不同。

protected override bool IsHMD { get; }

LocalPointCloud

当前点云数据位置信息。仅在Opened为true时可用。

public List<Vector3> LocalPointCloud { get; }

Opened

相机是否打开。

public bool Opened { get; }

Size

当前图像大小。仅在OpenedMonoBehaviour.enabled都为true时可用。

public Vector2Int Size { get; }

方法

Close()

关闭设备。

public void Close()

HitTestAgainstHorizontalPlane(Vector2)

在当前视野内实时检测到的水平面上进行Hit Test,点击到某个水平面后返回该平面上距离Hit Test射线最近的3D点的位置坐标。pointInView 需要被归一化到[0, 1]^2。

public List<Vector3> HitTestAgainstHorizontalPlane(Vector2 pointInView)

参数

pointInView

HitTestAgainstPointCloud(Vector2)

在当前点云中进行Hit Test,得到距离相机从近到远一条射线上的最近的一个3D点位置坐标。pointInView 需要被归一化到[0, 1]^2。

public List<Vector3> HitTestAgainstPointCloud(Vector2 pointInView)

参数

pointInView

OnSessionStart(ARSession)

仅当创建一个新的frame source时提供。它仅会在StartSession()过程中被访问。

处理session启动,如果这个frame source已经组装进Assembly。这个方法设计上是用来做延迟初始化的,你可以在这个方法中做AR独有的初始化工作。

protected override void OnSessionStart(ARSession session)

参数

session

OnSessionStop()

仅当创建一个新的frame source时提供。它会在StopSession(bool)或其它session停止/损坏过程中被访问。

处理session停止,如果这个frame source已经组装进Assembly。你可以使用这个方法销毁StartSession()以及session运行中创建的资源并恢复内部状态。在session销毁之前这个方法会被保证调用。如果frame source在sessino之前销毁,它将不会被调用,且session将损坏。

protected override void OnSessionStop()

Open()

打开设备。如果未手动调用Open()Close()ARSession启动后会自动Open()

public void Open()

事件

DeviceClosed

设备关闭的事件。

public event Action DeviceClosed

DeviceOpened

设备打开的事件,bool值表示是否成功。

public event Action<bool, PermissionStatus, string> DeviceOpened