0

MeshNormalMaterial最後から 2 番目の行 ( ) で使用する場合にのみ、サイコロはサイコロのように見えますresult = resultBSP.toMesh(materialNormal);。他のマテリアルでは、subtraction(ドット) のない立方体のように見えます。ThreeBSP私が使用している (ThreeCSG アップグレード) ライブラリは、こちらにあります。使用には問題ありませんMeshNormalMaterial。それを変更するためのオプションはほとんどありません。(他のマテリアルのようにパラメータを取りません)。

サイコロを作成するために使用している関数は次のとおりです。

function buildDice(){

    var materialNormal = new THREE.MeshNormalMaterial();
    var diceCube = new THREE.Mesh( new THREE.BoxGeometry(100,100,100), materialNormal);
    
    diceCube.position.x = 0;
    diceCube.position.y = 50;
    diceCube.position.z = 0;
    
    diceCube.geometry.computeFaceNormals();
    diceCube.geometry.computeVertexNormals();
    
    var cubeBSP = new ThreeBSP(diceCube);
    
    var sphereGeometry = new THREE.SphereGeometry(75,16,8);
    var sphereMesh = new THREE.Mesh(sphereGeometry, materialNormal);
    
    sphereMesh.scale.x = 0.17;
    sphereMesh.scale.y = 0.17;
    sphereMesh.scale.z = 0.17;
    
    //coords of the spheres 
    var xPositions = [....]; // coordinates for xPositions of sphereMesh
    var yPositions = [....];
    var zPositions = [....];
    
            
    var diceDots    = new THREE.Geometry();
    
    for(var i = 0; i < xPositions.length; i++){
        
        sphereMesh.position.x   = xPositions[i];
        sphereMesh.position.y   = yPositions[i];
        sphereMesh.position.z   = zPositions[i];
        THREE.GeometryUtils.merge(diceDots, sphereMesh);
    }
    
    var dotsMesh = new THREE.Mesh(diceDots, materialNormal);
    dotsMesh.geometry.computeFaceNormals();
    dotsMesh.geometry.computeVertexNormals();
    
    var dotsBSP = new ThreeBSP(dotsMesh);
    var resultBSP = cubeBSP.subtract(dotsBSP);
    
    result = resultBSP.toMesh(materialNormal);
    scene.add(result);

}
4

1 に答える 1

1

など、他のマテリアルでも機能しTHREE.MeshPhongMaterialます。-function を使用したこの jsfiddlebuildDice()が役立つ場合があります: http://jsfiddle.net/L0rdzbej/152/

ここに画像の説明を入力

ジオメトリをマージする前に、メッシュのマトリックスを更新する必要があります。これには非推奨の関数を使用しないことをお勧めします。

Three.js r73

于 2015-12-01T20:43:46.997 に答える