【问题标题】:Three js get child object from imported model三个js从导入的模型中获取子对象
【发布时间】:2018-06-12 02:23:49
【问题描述】:

我导入了一个包含几个子对象的 3D 模型,现在我想获得一个特定的子网格。

当我使用.getObjectByName("Cylinder", true) 时,我总是返回undefined,尽管模型有一个具有指定名称的子对象:

有没有办法获取子对象?

【问题讨论】:

    标签: javascript three.js aframe


    【解决方案1】:

    一段代码会很有用,但是当您尝试在模型实际加载之前访问模型属性时,会发生很常见的issue

    Don McCurdy 加载器以及内置加载器正在使用 three.js 异步加载器。在模型实际加载之前,您无法访问它的属性。

    我建议监听 model-loaded 事件,它似乎是在 a-frame 加载器中发出的,至少是 glTF oneobj one。 Don McCurdy 与他的工作一致,因此他的“实验性”装载机应该具有相同的机制。它应该像这样工作:

    <script>
    AFRAME.registerComponent("modelhandler", {
      init:function() {
         this.el.addEventListener("model-loaded", (e)=> 
         let child = obj.getObjectByName( "Cylinder", true );
         console.log(child);
       });
    }
    </script>
    
    <a-entity gltf-model="url(/path/to/model.gltf)" modelhandler></a-entity>
    

    如果这不起作用,您还可以尝试将超时设置为 5 秒(99% 的立方体,并且球体将在 5 秒内加载),然后尝试抓取子对象。尝试在组件中添加这样的内容:

    setTimeout(()=>{
      let child = obj.getObjectByName( "Cylinder", true );
      console.log(child);
    }, 5000});
    

    否则,至少你会知道问题不在于加载。

    【讨论】:

    • 等到模型加载修复它!感谢您的快速回复。
    • @JesterWest 当我开始在 aframe / 3 中使用模型时,我遇到了同样的问题 :) 很高兴我能提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多