我想使用 2 个网格创建一棵松树,其中 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);
松树按照我想要的方式正确定位,但是,整个合并的形状仅使用 1 种材质而不是 2 种(整个形状被第 1 种材质覆盖),并且我希望每个网格在合并两者时都有其各自的材质。
我做错了什么?任何想法?
经过长时间的研究,我发现我缺少几何对象“合并”方法的额外参数,最后一个参数是材料索引网格必须来自材料数组,例如: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);
(请注意我添加到每次合并的最后数字)。
However,我想澄清的是,这种做法仅在我们处理来自同一类型的各种几何图形时才有效,在这种情况下,我们正在合并两缸几何,但是如果我们想要将一个圆柱体与一个盒子合并并添加 MeshFaceMaterial,它将无法被正确识别,并且控制台会抛出“无法从未定义中读取属性映射/属性”的消息,尽管如此,我们仍然可以合并两个几何图形但没有提供多种材料(这是我犯的一个可怕的错误)。
希望这对任何人都有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)