RokidUXRFrameSource Class

Description

在场景中将Rokid UXR的输出连接到EasyAR输入的自定义frame source。通过EasyAR Sense的自定义相机功能提供Rokid UXR支持。

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

为了使用这个frame source, Rokid UXR SDK 是必需的。你需要根据官方文档配置Rokid UXR SDK。

在可用性检查中, FrameSource.Camera 是需要的,如果没有事先设置,会自动从场景物体中选择。


MonoBehaviour Messages

protected virtual void LateUpdate()

protected virtual void Awake()

protected virtual void OnApplicationPause(bool pause)

protected virtual void OnDestroy()


Properties

IsHMD

C#

protected override bool IsHMD { get; }

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

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

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

Display

C#

protected override IDisplay Display { get; }

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

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

IsAvailable

C#

protected override Optional<bool> IsAvailable { get; }

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

当前frame source是否可用。

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

OriginType

C#

protected override ExternalDeviceFrameSource.DeviceOriginType OriginType { get; }

设备原点类型。

Camera

C#

protected override Camera Camera { get; }

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

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

OriginCandidate

C#

public MonoBehaviour OriginCandidate { get; set; }

ExternalDeviceFrameSource.Origin 的备选,如果没设置,将会自动从场景中获取或生成。

AvailableCenterMode

C#

internal protected override IReadOnlyList< ARSession.ARCenterMode > AvailableCenterMode { }

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

所有可以使用的中心模式。

IsCameraUnderControl

C#

internal protected override bool IsCameraUnderControl { }

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

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

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

Origin

C#

protected virtual GameObject Origin { get; }

设备原点。你需要在 ExternalDeviceFrameSource.OriginTypeExternalDeviceFrameSource.DeviceOriginType.Custom 时定义自己的原点,其它时候不需要重新定义。

ReceivedFrameCount

C#

public int ReceivedFrameCount { get; }

获取到的帧计数。通常在debug中使用。如果这个数值停止增长,通常是硬件问题,某些设备(比如Nreal)重新插拔可能能解决。


Methods

OnSessionStart

C#

protected override void OnSessionStart( ARSession session)

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

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

OnSessionStop

C#

protected override void OnSessionStop()

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

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

HandleRenderFrameData

C#

protected void HandleRenderFrameData(double timestamp, Pose pose, MotionTrackingStatus trackingStatus)

输入渲染帧数据。

请确保在设备数据准备好之后每帧调用,不能跳帧。这些数据需要与驱动同一帧内当前Unity渲染相机的数据一致。

HandleCameraFrameData

C#

protected bool HandleCameraFrameData(double timestamp, Image image, CameraParameters cameraParameters, ExternalDeviceFrameSource.Extrinsics extrinsics, Pose deviceToOriginTransform, MotionTrackingStatus trackingStatus)

输入相机帧数据。

建议输入30或60fps的数据。最小可接受帧率 = 2,但部分算法响应时间会受影响。它可以在任何线程调用,只要你的API都是线程安全的即可。这些数据需要与相机传感器曝光时的数据一致。只要可以获取,建议输入色彩数据到EasyAR Sense,这对EasyAR Mega的效果是有帮助的。为实现最佳效率,你可以设计整个数据链条让原始YUV数据直接通过共享内存透传,并直接使用数据指针传入EasyAR Sense。请注意数据所有权。

TryAcquireBuffer

C#

protected Optional< Buffer > TryAcquireBuffer(int size)

尝试从内存池中获取内存块。

CheckAvailability

C#

private virtual System.Collections.IEnumerator CheckAvailability()

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

FrameSource.IsAvailable 等于null时用于检查frame source是否可用的 Coroutine