ExternalDeviceMotionFrameSource Class¶
Description¶
表示具有运动跟踪能力的外部设备的frame source。通常表示头戴设备,其中相机渲染和设备跟踪都由设备SDK完成。
这个frame source是一种运动跟踪设备,在 ARSession 中会输出运动数据。
你可以通过继承它来实现头显等设备输入,但你必须自己完成运动跟踪功能,EasyAR的运动跟踪并不能直接在外部设备上使用。你需要自己从硬件或其它地方获取图像和pose数据并输入到EasyAR,EasyAR不提供这些数据的获取能力,但提供将这些数据输入EasyAR之后运行EasyAR功能的能力。
在使用个人版license或试用版Mega服务时,如果运行时选择了自定义相机,EasyAR每次启动将只能使用100秒。
MonoBehaviour Messages¶
protected virtual void Awake() |
protected virtual void OnApplicationPause(bool pause) |
protected virtual void OnDestroy() |
Properties¶
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模式下。
Camera¶
- C#
internal protected override Camera Camera { }
仅当创建一个新的frame source时提供。它仅会在 ARSession.Assemble 过程中被访问。
在桌面设备或手机上,该相机代表现实环境中相机设备在虚拟世界中对应的 Camera ,其投影矩阵和位置都将与真实相机对应,受EasyAR控制。在头显上,该相机仅用于将一些诊断文字展示在眼前,不用于画面渲染,相机也不受EasyAR控制。
OriginType¶
- C#
internal protected virtual abstract ExternalDeviceFrameSource.DeviceOriginType OriginType { }
设备原点类型。
Origin¶
- C#
protected virtual GameObject Origin { get; }
设备原点。你需要在 ExternalDeviceFrameSource.OriginType 为 ExternalDeviceFrameSource.DeviceOriginType.Custom 时定义自己的原点,其它时候不需要重新定义。
ReceivedFrameCount¶
- C#
public int ReceivedFrameCount { get; }
获取到的帧计数。通常在debug中使用。如果这个数值停止增长,通常是硬件问题,某些设备(比如Nreal)重新插拔可能能解决。
IsHMD¶
- C#
internal protected virtual abstract bool IsHMD { }
仅当创建一个新的frame source时提供。它仅会在 ARSession.Assemble 过程中被访问。
当前frame source是否是头显。如果是头显,诊断信息将显示在相机前的3D板子上。
部分frame filter在设备上运行会有不同。
Display¶
- C#
internal protected virtual abstract IDisplay Display { }
仅当创建一个新的frame source时提供。它仅会在 ARSession.Assemble 过程中被访问。
提供显示系统信息。你可以使用 Display.DefaultSystemDisplay 或 Display.DefaultHMDDisplay 来获取默认的显示信息。
IsAvailable¶
- C#
internal protected virtual abstract Optional<bool> IsAvailable { }
仅当创建一个新的frame source时提供。它仅会在 ARSession.Assemble 过程中被访问。
当前frame source是否可用。
如果数值等于null, FrameSource.CheckAvailability 会被调用,数值将在 Coroutine 结束后获取。
Methods¶
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。请注意数据所有权。
OnSessionStart¶
- C#
private override void OnSessionStart( ARSession session)
仅当创建一个新的frame source时提供。它仅会在 ARSession.StartSession 过程中被访问。
处理session启动,如果这个frame source已经组装进 ARSession.Assembly 。这个方法设计上是用来做延迟初始化的,你可以在这个方法中做AR独有的初始化工作。
OnSessionStop¶
- C#
private override void OnSessionStop()
仅当创建一个新的frame source时提供。它会在 ARSession.StopSession 或其它session停止/损坏过程中被访问。
处理session停止,如果这个frame source已经组装进 ARSession.Assembly 。你可以使用这个方法销毁 ARSession.StartSession 以及session运行中创建的资源并恢复内部状态。在session销毁之前这个方法会被保证调用。如果frame source在sessino之前销毁,它将不会被调用,且session将损坏。
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 。