2

シーンを作成しています & ブール関数を使用して壁に穴を開けました。ただし、照明により、結果として得られる形状の顔が台無しになっていることがわかります。断片化して照明を後方に表示するのではなく、表面を 1 つの固体のように見せたいと考えています。私のジオメトリで何がうまくいかないのか誰か知っていますか?

オブジェクトをブーリアン化するコードは次のとおりです。

//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;
};

シーンには 2 つのライトがあります。

        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

あなたの問題は2つの問題によるものです。

まず、を使用する必要がありますFlatShading

次に、このスタックオーバーフローの投稿で説明されているように、MeshLambertマテリアルは各頂点の照明のみを計算し、各面の色を補間します。MeshPhongMaterial各テクセルで色を計算します。

MeshPhongMaterial表示されている照明アーティファクトを回避するために使用する必要があります。

three.js r.68

于 2014-08-27T23:24:45.573 に答える