3

JSON モデルを 1 回ロードして、スケールや位置などを変えて複数回シーンに追加することはできますか?

Object3D() を配列に追加し、配列内のオブジェクトに位置とスケールを指定してシーンに追加し、このプロセスを繰り返すと、配列内のすべてのオブジェクトの位置とスケールが上書きされます。

機能するものは何も思いつかないので、誰かが私が達成しようとしていることの実例を教えてくれることを願っています.

これが私の失敗した試みの(多くのうちの1つ)です。私の説明が十分でない場合は、私がやろうとしていることの基本的なアイデアを提供する必要があります.

 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 に答える