2017-04-09 249 views
0

是否有一种方法可以使用three.js保存和加载字符串化对象?使用three.js保存和加载文件

我发现这一点:https://github.com/josdirksen/learning-threejs/blob/master/chapter-08/03-load-save-json-object.html

但他们使用localstorage保存和加载,这将不会在会话或不同的计算机之间工作。

有没有像加载模型一样加载文件的方法?这应该就像加载游戏的数据文件一样。

我使用Autodesk Viewer在本地运行webgl客户端http-server

+0

您可以使用File API保存/读取文件,但会始终提示用户每次保存的保存位置。要保存在各种本地存储之外,您需要一台服务器。 [看这篇文章](https://games.greggman.com/game/saving-and-loading-files-in-a-web-page/)如何开始写这样的服务器 – gman

+0

但已经有一台服务器为模型文件提供服务,为什么我不能使用它? @gman – shinzou

+0

也许你可以,但你需要添加功能和路线加载和保存。保存文件通常不是标准的服务器功能,它是您添加的功能以满足您的项目需求 – gman

回答

1

如果Object可以写入localstorage,它也可以作为文件导出。您可以将它们发送到服务器并将它们存储在那里(也许类似firebase在这里很有用),或者您可以直接从浏览器中直接下载“下载”。这在Create a file in memory for user to download, not through server中有解释。

要加载文件,您可以使用file-api,如下所示:How to open a local disk file with Javascript?

您只需在您的示例中相应地替换localstorage-parts。

+0

为什么我不能使用服务于模型文件的相同服务器? – shinzou

+0

当然,你也可以做到这一点。但是你说你使用的是http服务器,afaik不支持在服务器上存储文件的PUT或POST请求。这就是为什么我给了一些纯静态服务器的选择。 –

1

添加到Martin's answer,Autodesk Viewer使用由Model Derivative API翻译和托管的文件。可以在同一场景中显示多个文件。查看器是只读的。有一个getState和loadState函数来获取表示当前放大/爆炸/视图信息的对象,并可以序列化并存储在某个位置。

some samples显示如何在模型上移动几何图形,例如,移动墙的几何图形(从建筑物模型)。但这并不是持续的,这意味着您需要实施JavaScript(客户端)+后端基础架构来保存和恢复这些转换。