我不知道我做错了什么。我有多个网格,我试图合并到一个网格,以便我可以节省绘制调用。 我的每个网格都有独特的材质。在这个例子中,它只有不同的颜色,但实际上它们将映射出独特的纹理。
这是我的代码:
materials = [];
blocks = [];
var tempMat;
var tempCube;
var tempGeo;
var tempvec;
// block 1
tempMat = new THREE.MeshLambertMaterial({ color: '0x0000ff' });
materials.push( tempMat );
tempGeo = new THREE.CubeGeometry(1, 1, 1);
for (var ix=0; ix<tempGeo.faces.length; ix++) {
tempGeo.faces[ix].materialIndex = 0;
}
tempCube = new THREE.Mesh( tempGeo, tempMat );
tempCube.position.set(0, 3, -6);
blocks.push( tempCube );
// block 2
tempMat = new THREE.MeshLambertMaterial({ color: '0x00ff00' });
materials.push( tempMat );
tempGeo = new THREE.CubeGeometry(1, 1, 1);
for (var ix=0; ix<tempGeo.faces.length; ix++) {
tempGeo.faces[ix].materialIndex = 1;
}
tempCube = new THREE.Mesh( tempGeo, tempMat );
tempCube.position.set(1, 3, -6);
blocks.push( tempCube );
// Merging them all into one
var geo = new THREE.Geometry();
for (var i=0; i<blocks.length; i++) {
blocks[i].updateMatrix();
geo.merge(blocks[i].geometry, blocks[i].matrix, i);
}
var newmesh = new THREE.Mesh( geo, new THREE.MeshFaceMaterial( materials ) );
scene.add(newmesh);
基本上,这给了我一个错误,上面写着: 未捕获的TypeError:无法读取未定义的属性“可见” 每次调用我的渲染函数。
我哪里出错了?
答案 0 :(得分:2)
您正在将几何合并为一个,并使用MeshFaceMaterial
(在r.72中重命名为MultiMaterial
)。
合并具有不同材质索引的几何图形没有任何意义。
WebGLRenderer
需要按材质对几何图形进行分割以进行渲染。
根据经验法则,只有合并几何形状(如果它们将使用单一材质渲染)。
three.js r.72