Snap! 的 Spline 库

Snap! 的 Spline 库

💡 原文英文,约900词,阅读约需4分钟。
📝

内容提要

本文介绍了如何在Snap!中引入3D环境,利用Spline库创建和交互3D项目。通过iframe技术,Snap!能够与3D世界进行通信,使用户更直观地操作虚拟对象。文章还提供了示例项目链接,并解释了获取世界URL及使用API的方法。

🔎

延伸解读

为何选择 Spline 作为 3D 引擎

文章比较了 Unity、Spline、threejs、babylonjs 等引擎后,最终选择 Spline,主要因为其简单易用,且与 Scratch 有许多相似之处,能大幅降低 3D 创作难度。作者还曾考虑为 Snap! 开发深度集成的 3D 编辑器,但担心开发量巨大且易用性存疑,因而放弃,转而将 Spline 视为 Snap! 的“外部编辑器”,由 Spline 负责创建 3D 项目并暴露 API,Snap! 负责编程控制。

Snap! 与 Spline 的协作模式

文章将这种协作类比为 Snap! 操作 MicroBlocks 项目:Spline 和 MicroBlocks 负责“内部编程”并对外提供服务,Snap! 则作为客户端使用这些服务。具体实现上,Snap! 通过 iframe 库引入基于 Web 的 3D 世界,并利用 postMessage API 与 iframe 内的 3D 世界通信。这种模式让 Snap! 无需内置 3D 引擎,也能借助外部工具实现 3D 交互。

同步通信与 dynatalk 的作用

浏览器提供的 postMessage 是异步的发布/订阅式通信,但某些场景需要同步通信,例如 Spline 库中的 ask _ for _ 积木,类似于 RPC 或函数调用。文章指出,dynatalk 可以实现这一点,创建 dynatalk-over-postmessage 只需将消息通道从 MQTT 切换为 postMessage,并调整消息的接收和发送机制。这为 Snap! 与 3D 世界之间提供了更灵活的交互方式。

自托管与 API 使用要点

文章通过 FAQ 说明,open world url 积木需要传入从 Spline 项目 Export 按钮获取的 URL,该积木会将 URL 传递给一个 iframe 页面。若想自托管项目文件,可以下载 scene.splinecode 文件并存放在自己的服务器上,再加载使用。此外,Spline 暴露的 API 决定了外部系统(如 Snap!)如何与 Spline 项目交互,具体可参考文章提供的 API 描述。

❓

Q&A

如何在Snap!中引入3D环境?

可以通过使用iframe库将基于Web的3D世界引入Snap!,并利用Spline库创建和交互3D项目。

为什么选择Spline作为3D引擎?

Spline简单易用,与Scratch有许多相似之处,降低了3D创作的难度。

Snap!如何与3D世界进行通信?

Snap!通过postMessage API与iframe中的3D世界进行通信。

Spline库提供了哪些API?

Spline库提供的API允许外部系统(如Snap!)与Spline项目进行交互。

如何获取Spline项目的世界URL?

可以通过Spline项目的导出按钮获取世界URL,或参考文章中的FAQ部分。

在Snap!中操作Spline项目的方式是什么?

在Snap!中操作Spline项目的方式类似于操作MicroBlocks项目,Snap!作为客户端使用这些服务。

🏷️

标签

➡️

继续阅读