2017-04-09 69 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(客戶端)+後端基礎架構來保存和恢復這些轉換。