ThreeCSG не дает ожидаемого результата - PullRequest
0 голосов
/ 20 мая 2019

Я хочу создать простое приложение в three.js Для этого приложения мне нужно вычесть две сетки, и я обнаружил, что ThreeCSG может сделать это. Но почему-то я не получаю ожидаемого результата.

Я скопировал код из примера, но даже это не работает должным образом.

Попробуем другую функцию, такую ​​как объединение. Но вместо того, чтобы объединить две сетки в одну, они удаляются.

ссылка на ThreeCSG: https://github.com/chandlerprall/ThreeCSG/blob/master/ThreeCSG.js

результат, который я получаю при вычитании

результат, который я получаю при использовании 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 голосов
/ 21 мая 2019

Я нашел решение. Три CSG, которые я использовал, были повреждены, этот работает именно так, как и должен.

Ссылка на рабочий ThreeCSG: https://github.com/oathihs/ThreeCSG/blob/master/dist/THREE.CSG.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...