2

我正在创建一个场景并使用布尔函数在我的墙上切出洞。然而,照明显示最终的形状已经弄乱了面孔。我希望表面看起来像一个实心件,而不是碎片化并向后显示照明。有谁知道我的几何可能出了什么问题?

布尔对象的代码如下:

//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; 我可以看到在布尔运算之后我的墙壁没有合并。有没有办法合并它们?

未合并的面

4

1 回答 1

4

你的问题是由于两个问题。

首先,您应该使用FlatShading.

其次,正如这个 stackoverflow 帖子中所解释的,MeshLambert材质仅计算每个顶点的光照,并在每个面上插入颜色。MeshPhongMaterial计算每个纹素的颜色。

您需要使用MeshPhongMaterial来避免您看到的照明伪影。

三.js r.68

于 2014-08-27T23:24:45.573 回答