【问题标题】:Create an Array of Meshes from Object (THREE.JS and GLTF)从对象创建一个网格数组(THREE.JS 和 GLTF)
【发布时间】:2019-02-03 17:19:30
【问题描述】:

下面是我将网格加载到对象上的一段代码。目前它遍历整个事物。

当前代码:

var loader = new THREE.GLTFLoader();
            loader.load( '../gtf/Box.gltf', function ( gltf ) {
                model = gltf.scene;

                gltf.scene.traverse( function ( child ) {
                    if ( child.isMesh ) {
                        child.material.map = texture;
                    }
                } );

                scene.add( model);
            } );

我将如何制作children[] 的数组?然后每个孩子将允许我分配单独的纹理。

我在 Blender 中使用单独的网格和材质制作了模型。

在THREE.JS中,我希望能够去:

children[0].material.map = blueTexture;

children[1].material.map = greenTexture;

【问题讨论】:

    标签: javascript html three.js blender gltf


    【解决方案1】:

    如果我正确理解您的问题,您可以执行以下操作:

    var loader = new THREE.GLTFLoader();
    loader.load( '../gtf/Box.gltf', function ( gltf ) {
      model = gltf.scene;
    
      var children = []
    
      // Construct array of children during traversal of gltf object
      gltf.scene.traverse( function ( child ) {
          if ( child.isMesh ) {
              children.push(child)
          }
      } );
    
      // Assuming array length is 2 or more, and blueTexture/greenTexture are defined
      children[0].material.map = blueTexture;
      children[1].material.map = greenTexture;
    
      scene.add( model);
    } );
    

    【讨论】:

    • 嘿 Dacre,正是我想要的。我会再次发表评论,让您知道它是否有效在遍历后是否有一个调用/函数可以用来获取数组的大小?
    • children.length
    • 嘿@TheGoldenD0nut 很高兴我能帮上忙——是的,你可以这样做:children.length 在遍历完成后获取数组的大小。如果您需要在load() 处理程序之外访问此数组,只需将var children = [] 移到该函数之外。希望这会有所帮助!
    猜你喜欢
    • 2021-03-30
    • 2019-06-29
    • 2016-05-17
    • 1970-01-01
    • 2018-06-17
    • 2018-03-26
    • 2022-11-03
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多