Edg*_*der 6 javascript merge mesh material three.js
我想用2个网格创建一个Pine,1个用于树干,另一个用于灌木丛,这就是我所做的:
var pine_geometry = new THREE.Geometry();
var pine_texture_1 = THREE.ImageUtils.loadTexture('./res/textures/4.jpg');
var pine_geometry_1 = new THREE.CylinderGeometry(25, 25, 50, 6);
var pine_material_1 = new THREE.MeshBasicMaterial({
map : pine_texture_1
});
var pine_1 = new THREE.Mesh(pine_geometry_1);
pine_1.position.x = x;
pine_1.position.y = y + 25;
pine_1.position.z = z;
pine_1.updateMatrix();
pine_geometry.merge(pine_1.geometry, pine_1.matrix);
var pine_texture_2 = THREE.ImageUtils.loadTexture('./res/textures/5.jpg');
var pine_geometry_2 = new THREE.CylinderGeometry(0, 70, 250, 8);
var pine_material_2 = new THREE.MeshBasicMaterial({
map : pine_texture_2
});
var pine_2 = new THREE.Mesh(pine_geometry_2);
pine_2.position.x = x;
pine_2.position.y = y + 175;
pine_2.position.z = z;
pine_2.updateMatrix();
pine_geometry.merge(pine_2.geometry, pine_2.matrix);
var pine = new THREE.Mesh(pine_geometry, new THREE.MeshFaceMaterial([pine_material_1, pine_material_2]));
pine.geometry.computeFaceNormals();
pine.geometry.computeVertexNormals();
Game.scene.add(pine);
Run Code Online (Sandbox Code Playgroud)
松树是我想要的正确定位的,然而,整个合并的形状只使用1种材料而不是2种(整个形状被第1种覆盖)并且我希望每个网格在mergin时都具有相应的材质.
我做错了什么?任何的想法?
经过长时间的研究后,我发现我错过了Geometry对象中'merge'方法的额外参数,最后一个参数是网格必须具有材料数组的材料的索引,例如:0 - >第一个材质在'材料'数组......等等.
所以,我的最后一段代码如下:
pine_geometry.merge(pine_1.geometry, pine_1.matrix, 0);
var pine_texture_2 = THREE.ImageUtils.loadTexture('./res/textures/5.jpg');
var pine_geometry_2 = new THREE.CylinderGeometry(0, 70, 250, 8);
var pine_material_2 = new THREE.MeshBasicMaterial({
map : pine_texture_2
});
var pine_2 = new THREE.Mesh(pine_geometry_2);
pine_2.position.x = x;
pine_2.position.y = y + 175;
pine_2.position.z = z;
pine_2.updateMatrix();
pine_geometry.merge(pine_2.geometry, pine_2.matrix, 1);
Run Code Online (Sandbox Code Playgroud)
(注意我添加到每个合并的最后一个数字).
但是,我想澄清一下,这种做法只适用于我们处理来自相同类型的各种几何形状,在这种情况下,我们要合并两个CylinderGeometry,但是如果我们想要合并例如Cylinder与Box AND添加MeshFaceMaterial,它将无法正确识别,控制台将抛出'无法读取未定义的属性映射/属性',但我们仍然可以合并两个几何但不提供多种材料(这是我犯的一个可怕的错误).
希望这对任何人都有帮助.