Strange result with ThreeCSG and subtract

喜你入骨 提交于 2019-12-13 08:18:48

问题


I'm learning three.js and for a project i need to create an inersection between a cylinder and a sphere. Here is the interesting part of the code :

var sphere_mesh_3 = createSphereMesh(rayon_1, 145, color);//,-2,2,-2,2);
sphere_mesh_3.position.z = 6;
//scene.add(sphere_mesh_3);

var sphere_mesh_4 = createSphereMesh(rayon_2, 145, color);//,-2,2,-2,2);
sphere_mesh_4.position.z = 7.5;
//scene.add(sphere_mesh_4);


function getZmaxRelSurfaceAspherique(mesh)
{
  var zMax = 0;
  for(var i = 0; i < mesh.geometry.vertices.length; i++)
  {
    var vec = mesh.geometry.vertices[i].clone();
    var x = vec.x;
    var y = vec.y;
    var z = vec.z;
    var abs_z = Math.abs(z);
    if(x!== 0 && y!==0 && Math.abs(z) !== 1.0)
    { 
      zMax = abs_z;
    }
  }
  return zMax;
}


var min_sph_2 = getZmaxRelSurfaceAspherique(sphere_mesh_3);
var max_sph_2 = getZmaxRelSurfaceAspherique(sphere_mesh_4);

var pos_z_1 = 6 + min_sph_2;
var pos_z_2  = 7.5 + max_sph_2;

var cylindre_sph = cylindreJointure(0,0,pos_z_2,0,0,pos_z_1,Math.abs(rayon_1*80),0xffff00);
var distance = Math.abs(pos_z_1 - pos_z_2);
scene.add(cylindre_sph);



R_sph = (max_sph_2*max_sph_2 + rayon_2*rayon_2)/(2*max_sph_2);

var geometry = new THREE.SphereGeometry( R_sph, 40, 40 );
var material = new THREE.MeshBasicMaterial( {color: 0x00ffff} );
var sphere = new THREE.Mesh( geometry, material );
sphere.position.z = pos_z_2 + R_sph - max_sph_2 ;
scene.add( sphere );

var cylindre_bsp = new ThreeBSP(cylindre_sph);
var sphere_bsp = new ThreeBSP(sphere);
var inter =  cylindre_bsp.subtract(sphere_bsp);

var result_1 = inter.toMesh(new THREE.MeshBasicMaterial({color : 0x0000ff}));

result_1.position.z = 15;
result_1.rotateX( Math.PI/2 );


scene.add(result_1);

Here is my two objets:

Cylinder and Sphere

....And the result :

After cylinder.subtract(sphere)...strange result

I don't understand why the substract betwwen the cylinder and the sphere give me these results.

thank you in advance :)

PS : I'm using three.js r74 and the latest version for threeCSG. Like it's impossible for the CSG to maintain the position of the Mesh with the r74 version ... but i can't change my version of three.js ^^''

来源:https://stackoverflow.com/questions/36129626/strange-result-with-threecsg-and-subtract

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!