2016-05-13 27 views
0

我想從導出中加載collada文件。這些文件以這樣的方式導出,即「基本」文件引用具有實際幾何圖形的另一個collada文件。如何在ThreeJs中加載引用的COLLADA文件

基本文件看起來像這樣:

<?xml version="1.0" encoding="utf-8"?> 
<COLLADA version="1.5.0" xmlns="http://www.collada.org/2008/03/COLLADASchema"> 
    <asset> 
    <contributor> 
     <author>ACME</author> 
    </contributor> 
    <created>2016-04-27T14:53:24</created> 
    <modified>2016-04-27T14:53:24</modified> 
    <unit meter="0.001" name="mm" /> 
    <up_axis>Z_UP</up_axis> 
    </asset> 
    <library_visual_scenes id="libvisualscenes"> 
    <visual_scene id="libvisualscenes.scene"> 
     <node id="38760" name="Part1_CATPart"> 
     <matrix>-1.000000 0.000000 0.000000 -399.679153 0.000000 0.000000 -1.000000 671.000000 0.000000 -1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000</matrix> 
     <instance_node url="Part1_CATPart_799.dae#acme_frame_self_origin" /> 
     </node> 
    </visual_scene> 
    </library_visual_scenes> 
    <scene> 
    <instance_visual_scene url="#libvisualscenes.scene" /> 
    </scene> 
</COLLADA> 

Part1_CATPart在上面的COLLADA被引用。 我嘗試了天真的方法,並使用ColladaLoader2.js加載此collada,但這導致錯誤ColladaLoader2.js:175 Uncaught TypeError: Cannot read property 'build' of undefined。加載Part1_CATPart直接工作。但是,這種方式不考慮基礎文件的矩陣。

有沒有辦法讓threejs` colladaLoader2獲取引用的文件?

回答

0

我相信解析方法中的網址被解析爲here on line 2326。通常,url指向另一個節點。你可以得到URL中的if語句像這樣:

if (iNode) 
    this.nodes.push((new Node()).parse(iNode)) ; 
}else{ 
    url = url.split("#")[0] 
    console.log(url); 
} 

然後你可以使用url加載子模型和它在onload回調添加到場景:

var loader = new THREE.ColladaLoader(); 
var result = loader.load(url); 
var scene = result.scene; 

var name, model, children = scene.children; 
var onLoad = function(result){ 
    // process the result of each child model and add to parent scene 
}; 
var onProgress = function(){}; 
loader.load(url, onLoad, onProgress); 

Here is a fiddle with a demo

小提琴只輸出url。正確加載我留給你。

+0

該文件被引用''而不是與節點名稱。 – Akkumulator

+0

@Akkumulator我更新了我的答案 – Wilt

+0

謝謝,這讓我朝着正確的方向思考。 – Akkumulator

相關問題