使用XR Foundation
现基于XR Foundation的接口实现渲染和采集
关键类
ARPointCloudManager
介绍
ARPointCloudManager:ARTrackedObjects的管理器。使用XRDepthSubsystem来识别和跟踪物理环境中的深度数据。
属性
Name | Description |
---|---|
gameObjectName | The name to be used for the GameObject whenever a new Object is detected. |
pointCloudPrefab | Getter or setter for the Point Cloud Prefab. |
方法
Name | Description |
---|---|
GetPrefab() | The Prefab that will be instantiated for each ARPointCloud. Can be null . |
OnAfterSetSessionRelativeData(ARPointCloud, XRPointCloud) | Invoked after each point cloud is updated with new data. |
OnDisable() | Invoked when this MonoBehaviour is disabled. Used to unregister with the ARRaycastManager. |
OnEnable() | Invoked when this MonoBehaviour is enabled. Used to register with the ARRaycastManager. |
OnTrackablesChanged(ListCloud>, ListCloud>, ListCloud>) | Invokes the pointCloudsChanged event. |
Raycast(Ray, TrackableType, Allocator) | Implementation for the IRaycaster interface. Raycasts against every point cloud. |
事件
Name | Description |
---|---|
pointCloudsChanged | Invoked once per frame with information about the ARTrackedObjects that have changed, that is, been added, updated, or removed. This happens just before ARTrackedObjects are destroyed, so you can set ARTrackedObject.destroyOnRemoval to false from this event to suppress this behavior. |
点云渲染
这里介绍如何用XR Foundation的接口渲染点云。
脚本介绍
这里,我已实现两个对点云进行可视化的脚本,一个是通过粒子系统渲染点云,一个是通过Mesh渲染点云,两种都可用。
- EqPointCloudPointsParticleVisualizer
- EqPointCloudPointsMeshVisualizer
此外,也可使用XRFoundation提供的Visualizer,如下图。
制作预制件
使用粒子系统可视化:
将挂载EqPointCloudPointsParticleVisualizer的组件制作成预制件(名为”ParticlePointCloudPrefab“)。
EqPointCloudParticleVisualizer包含渲染“CurrentFrame”和“All”两种模式。因此这里可以不使用XRFoundation的ARPointCloudParticleVisualizer组件
使用Mesh可视化:
将挂载EqPointCloudPointsMeshVisualizer的组件制作成预制件(名为”MeshPointCloudPrefab“)。
使用示例
仅使用XR Foundation的示例脚本即可。
步骤如下:
- 在“AR Session Origin”对象下添加 “ARPointCloudManager”组件
- 在“ARPointCloudManager”组件的PointCloudPrefab添加预制件(“…PointCloudPrefab”,这里二选一)
注意:挂载“ARPointCloudManager”组件的对象需要同时有“ARSessionOrigin”组件。
-
在“AR Session Origin”对象下添加 “EqVisualizationMode”组件
- 根据需求设置"Mode"值,若为All,则渲染所有已识别到的特征点。
注意事项
在“PointCloudPointsPrefab”预制件所挂载的组件中。
这里需要注意的是:若使用粒子系统可视化组件,粒子系统一定要在自定义的脚本(下图红框所示)的前面。
否则,即使当“Mode”设置为“All”,已经渲染的点云粒子也会在相机移动后消失。
点云采集
实现思路
- 若通过粒子系统实现可视化,则可通过读取粒子的位置信息从而实现点云数据的保存。
- 若通过Mesh实现可视化,则可读取mesh的顶点信息从而实现点云数据的保存。
使用示例
这里实现了点云采集器,直接挂载脚本即可
在相关Button的OnClick事件中关联方法
采集点云
运行程序 -> 移动设备进行采集 -> 保存点云
数据保存路径:\Android\data\com.xxx.xxx\files\PointCloud\Data_xxx.pts
点云加载
在Unity编辑器中导入查看
关联文档
【低成本-点云采集】使用深度API实现点云采集