ThreeCSG没有给出预期的结果

时间:2019-05-20 07:23:24

标签: javascript debugging three.js

我想在three.js中创建一个简单的应用程序 对于此应用程序,我需要减去两个网格,并且我发现ThreeCSG可以做到这一点。但是不知何故我没有得到预期的结果。

我已经从示例中复制了代码,但是即使这样也无法正常工作。

尝试其他一些功能,例如联合。但是,与其将两个网格合并为一个,而是将其删除。

链接到ThreeCSG:https://github.com/chandlerprall/ThreeCSG/blob/master/ThreeCSG.js

result that I get when subtracting

result that I get when I use union

var materialNormal = new THREE.MeshNormalMaterial( { side: THREE.DoubleSide } );
var diceCube = new THREE.Mesh( new THREE.BoxGeometry(10,10,10), materialNormal);

diceCube.position.x = 0;
diceCube.position.y = 5;
diceCube.position.z = 0;

diceCube.geometry.computeFaceNormals();
diceCube.geometry.computeVertexNormals();

var cubeBSP = new ThreeBSP(diceCube);

var sphereGeometry = new THREE.SphereGeometry(7.5,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 = [ 0, 3 ]; // coordinates for xPositions of sphereMesh
var yPositions = [ 10, 10 ];
var zPositions = [ 0, 0 ];

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];
    sphereMesh.updateMatrix();
    diceDots.merge( sphereMesh.geometry, sphereMesh.matrix );
}

var material = new THREE.MeshPhongMaterial( { color: 0xffaa00 });
var dotsMesh = new THREE.Mesh(diceDots);
dotsMesh.geometry.computeFaceNormals();
dotsMesh.geometry.computeVertexNormals();

var dotsBSP = new ThreeBSP(dotsMesh);
var resultBSP = cubeBSP.subtract(dotsBSP);

result = resultBSP.toMesh(material);
scene.add(result);

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 我使用的threeCSG已损坏,这完全可以完成它的工作。

链接到工作的ThreeCSG:https://github.com/oathihs/ThreeCSG/blob/master/dist/THREE.CSG.js