2016-05-13 5 views
0

Ich möchte Collada-Dateien von einem Export laden. Die Dateien werden so exportiert, dass die "Basis" -Datei eine andere Collada-Datei mit der aktuellen Geometrie referenziert.Wie referenzierte COLLADA-Dateien in ThreeJs geladen werden

Die Basis-Datei sieht wie folgt aus:

<?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 in der collada oben Bezug genommen wurde. Ich versuchte den naiven Ansatz und lud diese Collada mit der ColladaLoader2.js, aber dies führte zu dem Fehler ColladaLoader2.js:175 Uncaught TypeError: Cannot read property 'build' of undefined. Laden Part1_CATPart funktioniert direkt. Auf diese Weise wird jedoch die Matrix der Basisdatei nicht berücksichtigt.

Gibt es eine Methode, um dreijs 'colladaLoader2 holen die referenzierten Dateien?

Antwort

0

Ich glaube, dass die URL here on line 2326 in der Parse-Methode geparst wird. Normalerweise zeigt die URL intern auf einen anderen Knoten. Sie können die URL in der if-Klausel wie diese:

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

Dann könnten Sie die url verwenden das Kind Modell zu laden und zu der Szene hinzuzufügen in einem onload Rückruf:

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

Die Geige gibt nur die URL aus. Loading es richtig Ich überlasse es Ihnen.

+0

Die Datei wird mit '' und nicht mit dem Namen des Knotens referenziert. – Akkumulator

+0

@Akkumulator Ich aktualisierte meine Antwort – Wilt

+0

Danke, das brachte mich in die richtige Richtung denken. – Akkumulator