我正在创建一个场景&使用了一个布尔函数来在我的墙上挖洞。然而,灯光显示,由此产生的形状已经弄糟了脸。我希望表面看起来像一个坚实的一块,而不是碎裂和显示的灯光向后。有人知道我的几何学会出什么问题吗?
booleans对象的代码如下:
//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;我可以看到,在布尔操作之后,我的墙面没有被合并。有办法把他们合并吗?

发布于 2014-08-27 23:24:45
你的问题是两个问题造成的。
首先,您应该使用FlatShading。
第二,正如在this stackoverflow post中所解释的,MeshLambert材料只计算每个顶点的光照,并在每个脸上插入颜色。MeshPhongMaterial计算每个纹理的颜色。
您需要使用MeshPhongMaterial来避免您正在看到的照明工件。
three.js r.68号
https://stackoverflow.com/questions/25413335
复制相似问题