【问题标题】:Three.js - load JSON model once and add it multiple timesThree.js - 一次加载 JSON 模型并多次添加
【发布时间】:2023-03-18 01:28:01
【问题描述】:

是否可以一次加载一个 JSON 模型,然后以不同的比例、位置等多次将其添加到场景中?

如果我将 Object3D() 添加到数组中,为数组中的对象指定位置和比例,将其添加到场景中,然后重复此过程,数组中的每个对象的位置和比例都会被覆盖.

我想不出任何可行的方法,所以我希望有人能给我一个我正在努力完成的工作示例。

这是我失败的尝试之一(其中之一)。如果我的解释不够充分,应该让您对我正在尝试做的事情有一个基本的了解。

 function addModels(){

            var models = [];    

            var model = new THREE.Object3D();       
            var modelTex = THREE.ImageUtils.loadTexture( "textures/model.jpg" );
            var loader = new THREE.JSONLoader();
            loader.load( "models/model.js", function( geometry ) {
                mesh = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { map: modelTex }) );
                model.add(mesh);
            } );

            for(var i = 0; i < 5; i++){ 
                model.scale.set(i,i,i);
                model.position.set(i,i,i);
                models[i] = model;

                scene.add(models[i]);
            }   

        }

【问题讨论】:

    标签: javascript json three.js webgl


    【解决方案1】:

    你需要先克隆一个模型,然后设置位置和比例。

     for(var i = 0; i < 5; i++){ 
            var newModel = model.clone();
                newModel.position.set(i,i,i);
                newModel.scale.set(i,i,i);
    
                scene.add(newModel); 
    }  
    

    更新:示例如何在不加载的情况下创建 json 模型:Fiddle example 或只是在加载函数中简单地添加循环。

    【讨论】:

    • 这样做可以保存每个模型的位置和比例,但它们没有出现在我的场景中。
    • 加载是ajax异步加载,克隆前需要确保模型已经加载,最简单的方法是在加载函数中添加循环。
    【解决方案2】:

    您可以使用相同的几何形状和材料创建新的网格:

    loader.load( "models/model.js", function( geometry ) {
            var mat = new THREE.MeshLambertMaterial( { map: modelTex });
            for (var i = 0; i < 5; i++) { 
                var mesh = new THREE.Mesh( geometry, mat );
                mesh.position.set(i, i, i);
                mesh.scale.set(i, i, i);
                scene.add(mesh);
            }
    });
    

    【讨论】:

      猜你喜欢
      • 2022-09-30
      • 2016-02-06
      • 1970-01-01
      • 2015-01-14
      • 2017-08-10
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2020-05-16
      相关资源
      最近更新 更多