从 3.5.0 版本开始可用
可以通过 session.worldTrackerController
来控制平面放置相关的功能。
请注意: 目前平面放置仅支持在 移动设备、后置相机、竖屏 的场景下使用。在非移动设备上或输入横向画面时,放置接口无效。
平面放置示例特效包地址:https://webar.volccdn.com/obj/effect-webar-res-bucket/sdk350/worldTree2.zip
如果一个特效包支持平面放置,在特效加载完成后 session.worldTrackerController.isWorldTrackingAvailable
将返回 true
。否则该值为 false
。
请等待 session.loadEffect(...)
返回的 Promise
完成后再查询该值。
你可以使用 session.worldTrackerController.placeScene(x, y)
方法放置特效包中的场景到画面上。
这个方法接受两个参数:
x
要放置位置在画面中的 x 轴坐标,归一化坐标,取之范围在 0 - 1 之间。
y
要放置位置在画面中的 y 轴坐标,归一化坐标,取之范围在 0 - 1 之间。
图像的左上角为原点。例:传入 (0.5, 0.5) 代表放置在画面中心。
该方法会返回一个 Promise<boolean>
代表是否正确放置了场景。若返回结果为 false
你可以提示用户:“放置失败,请将镜头朝下,指向桌面或地面。”
你可以使用 session.worldTrackerController.updateScale()
方法对放置在画面中的场景进行缩放。
这个方法接受一个参数:
scale
缩放比例,1 为场景原始大小。在重新加载特效包后,场景的缩放会被重置。
你可以使用 session.worldTrackerController.removeScene()
方法清除已放置的场景。
在下列情况下,Web AR SDK 对平面和世界的跟踪将会受到影响,你需要清除已放置的场景,提醒用户重新放置。
输入图像时间戳不连续时
输入图像方向/长宽发生变化时
你可以通过使用 session.worldTrackerController.events
事件分发器来获取需要重新放置的信号。
const listener = session.worldTrackerController.events.addEventListener("worldTrackingNeedsReset", (event) => { // session.worldTrackerController.removeScene() // Let user place the scene again. });
不再需要监听这类事件的时候你可以调用 listener.dispose()
停止接收事件。