2017-05-26 96 views
0

我在Blender中創建了一個模型,然後使用Three.js官方導出器將其導出到JSON。然後我嘗試使用下面的代碼加載它:Three.js json加載器錯誤,但不更改文件擴展名

const loader = new THREE.JSONLoader(); 
loader.load('assets/models/bear.json', (geometry, materials) => { 
    const bear = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials)); 
    scene.add(bear); 
}); 

然後我得到了錯誤:

(unknown) TypeError: url.split is not a function 
    at Object.extractUrlBase (eval at <anonymous> (app.js:742), <anonymous>:32860:19) 
    at JSONLoader.load (eval at <anonymous> (app.js:742), <anonymous>:33166:120) 

這裏是我的JSON文件:https://github.com/elliepooh/VRcard/blob/master/src/assets/models/bear.json

我發現了一些決定,但他們都是關於將.json文件重命名爲.js並加載它。由於我使用的WebPack和eslint,這是因爲某些原因有問題......

我還試圖用Clara.io JSON裝載程序是這樣的:

const loader = new THREE.ObjectLoader(); 
loader.load('assets/models/bear.json', (obj) => { 
    scene.add(obj); 
}); 

然後我得到了以下類型錯誤:url.lastIndexOf不是一個函數

如果有任何方法加載json到three.js而不改變它的文件擴展名並且沒有這樣的錯誤?任何幫助,將不勝感激...

+0

由於某種原因,不喜歡你的網址。你能否把你的控制檯的完整錯誤貼出來?謝謝! – TheJim01

+0

我的猜測是JSON指的是一個值不是字符串url的紋理。我猜測這是因爲只有紋理加載器利用loader的extractUrlBase函數中的url.split,它由JSONLoader使用。我建議在codepen上發佈你的JSON,看看它是否加載到那裏,以便其他人可以複製錯誤。 – Radio

+0

@Radio感謝您的建議!我編輯了更多信息的描述 – elliepooh

回答

1

問題是在導入.json文件。相反,我應該用一個字符串加載它。 (因爲它是在描述,而是我在代碼中使用@import)

現在看起來是這樣的:

const loader = new THREE.JSONLoader(); 
loader.load('/static/bear.json', (geometry, materials) => { 
    const bear = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials)); 
    scene.add(bear); 
}); 

十分感謝@ TheJim01他的幫助!