我正在制作一个场景&使用布尔函数来切除墙上的洞。然而,照明显示所得到的形状使面部混乱。我希望表面看起来像一个坚固的部分,而不是碎片并向后显示照明。有谁知道我的几何体会出现什么问题?
布尔对象的代码如下:
//boolean subtract two shapes, convert meshes to bsps, subtract, then convert back to mesh
var booleanSubtract = function (Mesh1, Mesh2, material) {
//Mesh1 conversion
var mesh1BSP = new ThreeBSP( Mesh1 );
//Mesh2 conversion
var mesh2BSP = new ThreeBSP( Mesh2 );
var subtract_bsp = mesh1BSP.subtract( mesh2BSP );
var result = subtract_bsp.toMesh( material );
result.geometry.computeVertexNormals();
return result;
};
我在场景中有两盏灯:
var light = new THREE.DirectionalLight( 0xffffff, 0.75 );
light.position.set( 0, 0, 1 );
scene.add( light );
//create a point light
var pointLight = new THREE.PointLight(0xFFFFFF);
// set its position
pointLight.position.x = 10;
pointLight.position.y = 50;
pointLight.position.z = 130;
// add to the scene
scene.add(pointLight);
编辑:使用WestLangley的建议,我能够部分修复墙渲染。并通过使用material.wireframe = true;我可以看到在布尔操作之后我的墙面没有合并。有没有办法合并它们?
答案 0 :(得分:4)
你的问题是由于两个问题造成的。
首先,您应该使用FlatShading
。
其次,正如this stackoverflow post中所述,MeshLambert
材质仅计算每个顶点的光照,并在每个面上插入颜色。 MeshPhongMaterial
计算每个纹素的颜色。
您需要使用MeshPhongMaterial
来避免您看到的灯光瑕疵。
three.js r.68