【问题标题】:How to load referenced COLLADA files in ThreeJs如何在 ThreeJs 中加载引用的 COLLADA 文件
【发布时间】:2016-09-09 21:41:22
【问题描述】:

我想从导出加载 collada 文件。这些文件以这样一种方式导出,即“基础”文件引用另一个具有实际几何图形的 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获取引用的文件?

【问题讨论】:

    标签: javascript three.js collada


    【解决方案1】:

    我相信 url 在 parse 方法中被解析为here on line 2326。通常,url 指向另一个节点。您可以像这样在 if 子句中获取 url:

    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

    小提琴只输出网址。正确加载它我留给你。

    【讨论】:

    • 该文件使用&lt;instance_node url="Part1_CATPart_799.dae#acme_frame_self_origin" /&gt; 引用,而不是节点名称。
    • 谢谢,这让我想到了正确的方向。
    猜你喜欢
    • 2017-07-15
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2021-03-09
    • 2011-05-11
    相关资源
    最近更新 更多