3

是否可以一次加载 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]);
            }   

        }
4

2 回答 2

6

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

 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 模型:小提琴示例或只是在加载函数中简单地添加循环。

于 2013-03-27T22:34:26.853 回答
4

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

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);
        }
});
于 2013-03-28T08:18:43.653 回答