You need to enable JavaScript to run this app.
导航

平面放置

最近更新时间2023.12.19 14:08:31

首次发布时间2023.12.19 14:08:31

从 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() 停止接收事件。