Javascript 在Three.js中合并纹理网格

Javascript 在Three.js中合并纹理网格,javascript,three.js,Javascript,Three.js,我尝试创建多个网格,然后将它们合并为一个(使用Three.js r.71)。每个网格可以在不同的面上具有不同的材质。我需要使所有材质正确显示在生成的网格上 我找到了一种实现预期结果的方法,但是我的代码现在看起来非常糟糕。three.js的开发者真的记住了这种方法吗 我找不到合适的例子。有没有人能拿出更好的方法 var totalGeom = new THREE.Geometry(); var meshes = [getBlock(), getBlock()]; meshes[0].positio

我尝试创建多个网格,然后将它们合并为一个(使用Three.js r.71)。每个网格可以在不同的面上具有不同的材质。我需要使所有材质正确显示在生成的网格上

我找到了一种实现预期结果的方法,但是我的代码现在看起来非常糟糕。three.js的开发者真的记住了这种方法吗

我找不到合适的例子。有没有人能拿出更好的方法

var totalGeom = new THREE.Geometry();
var meshes = [getBlock(), getBlock()];
meshes[0].position.x = 1;

for (var i = 0; i < meshes.length; i++) {
    var mesh = meshes[i];
    totalGeom.mergeMesh(mesh);
    for (var j = mesh.geometry.faces.length-1; j <= 0; j--) {
        totalGeom.faces[j].materialIndex = mesh.geometry.faces[j].materialIndex;
    }
}

var materials = meshes[0].material.materials.concat(meshes[1].material.materials);
var totalMesh = new THREE.Mesh(totalGeom, new THREE.MeshFaceMaterial(materials));

scene.add(totalMesh);


function getBlock() {
    var geometry = new THREE.BoxGeometry(1, 1, 1, 1, 1, 1);
    var material = new THREE.MeshFaceMaterial([
        new THREE.MeshPhongMaterial({map: THREE.ImageUtils.loadTexture('sides/2.png')}),
        new THREE.MeshPhongMaterial({map: THREE.ImageUtils.loadTexture('sides/2.png')}),
        new THREE.MeshPhongMaterial({map: THREE.ImageUtils.loadTexture('sides/1.png')}),
        new THREE.MeshPhongMaterial({map: THREE.ImageUtils.loadTexture('sides/3.png')}),
        new THREE.MeshPhongMaterial({map: THREE.ImageUtils.loadTexture('sides/2.png')}),
        new THREE.MeshPhongMaterial({map: THREE.ImageUtils.loadTexture('sides/2.png')})
    ]);
    return new THREE.Mesh(geometry, material);
}
var totalGeom=new THREE.Geometry();
var mesh=[getBlock(),getBlock()];
网格[0]。位置。x=1;
对于(var i=0;i对于(var j=mesh.geometry.faces.length-1;j我建议您不要将所有网格混合在一个网格中,而是创建一个包含所有不同网格的组。如果这样做,您就不需要混合所有材质,并且可以避免很多问题。当然,您还可以获得将所有网格放在同一个对象上的所有优点t

例如,要执行此操作,请遵循以下步骤:

var scene = new THREE.Scene();
var group = new THREE.Object3D();
var numObjects = 5; //As an example

for(var i=0;i<numObjects;i++){
   var cubeGeometry = new THREE.BoxGeometry(100, 100, 100);
   var material = new THREE.MeshPhongMaterial();
   var mesh = new THREE.Mesh(cubeGeometry, material);
   group.add(mesh);
}

scene.add(group);
var scene=new THREE.scene();
var group=new THREE.Object3D();
var numObjects=5;//例如

for(var i=0;我想知道答案,但我的主要目标是性能。我需要从组件构建一个相当大的静态位置。在这方面,组没有帮助。合并有帮助。在这种情况下,我的anwser没有用!我对你没有帮助,抱歉!@PavelSinitsinRelated: