Three.js ThreeCSG布尔运算导致意外网格结果
我正在创建一个场景&使用布尔函数在我的墙上剪出洞。但是,灯光显示,生成的形状已经弄乱了面。我希望表面看起来像一个实体,而不是支离破碎并向后显示灯光。有人知道我的几何学出了什么问题吗 布尔对象的代码如下所示:Three.js ThreeCSG布尔运算导致意外网格结果,three.js,threecsg,Three.js,Threecsg,我正在创建一个场景&使用布尔函数在我的墙上剪出洞。但是,灯光显示,生成的形状已经弄乱了面。我希望表面看起来像一个实体,而不是支离破碎并向后显示灯光。有人知道我的几何学出了什么问题吗 布尔对象的代码如下所示: //boolean subtract two shapes, convert meshes to bsps, subtract, then convert back to mesh var booleanSubtract = function (Mesh1, Mesh2, materia
//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的建议,我能够部分修复墙壁渲染。并使用材质。线框=真;我可以看到,在布尔运算之后,我的墙面没有合并。有没有办法合并它们
您的问题是由两个问题造成的 首先,您应该使用
FlatShading
其次,如中所述,MeshLambert
material仅计算每个顶点处的照明,并在每个面上插值颜色<代码>网格材质计算每个纹理的颜色
您需要使用MeshPhongMaterial
来避免看到的照明瑕疵
three.js r.68使用
three.VerteNormalsHelper
以便可以看到顶点法线。我希望computeVertexNormals()
是一种您不应该使用的方法,因为它平滑共享法线。可以调用computeFaceNormals()
并使用THREE.FlatShading
。确保您的库版本兼容。@WestLangley删除computeVertexNormals()肯定有助于修复墙的外观。谢谢但由于某些原因,这些面看起来仍然按照布尔值分割。ThreeCSG在布尔运算后不会将面合并为一个面吗?如果您设置material.wireframe=TRUE
@WestLangley,可能您会有所了解,我可以看到面没有合并,但不知道如何修复。您使用的是MeshLambertMaterial
?如果是,请尝试MeshPhongMaterial
。