0

私はthree.jsを学んでおり、プロジェクトのために円柱と球の間に交差を作成する必要があります。コードの興味深い部分は次のとおりです。

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);

ここに私の2つのオブジェクトがあります:

円柱と球

....そして結果:

シリンダーの後.減算(球)...奇妙な結果

円柱と球の間の減算がこれらの結果をもたらす理由がわかりません。

前もって感謝します :)

PS : three.js r74 と threeCSG の最新バージョンを使用しています。CSG が r74 バージョンでメッシュの位置を維持することは不可能です...しかし、three.js のバージョンを変更することはできません ^^''

4

0 に答える 0