2017-01-17 11 views

答えて

0
 var geo = new THREE.Geometry(); 
    var mat = new THREE.MeshBasicMaterial(); 
    var middlePoint = new THREE.Vector3(); 
    for(var i=0;i<dots.length;i++){ 
     middlePoint.add(dots[i].position) 
     geo.vertices.push(new THREE.Vector3(dots[i].x,dots[i].y,dots[i].z)); 
    } 
    middlePoint.divideScalar(dots.length); 
    geo.vertices.push(middlePoint); 

    for(var i=0;i<dots.length;i++){ 
     middlePoint.add(dots[i].position) 
     if(i >0){ 
      geo.faces.push(new THREE.Face3(geo.vertices.length-1,dots[i],dots[i-1])); 
     } 
    } 

    var mesh = new THREE.Mesh(geo,mat); 
+1

顔を押しても、穴が覆われることはありません。 – gaitat

+0

私は答えの中のコードを編集しました。中間点を見つけて、真ん中から多角形の任意の2つの頂点まで顔を作成することができます。それは完全に良いことではない場合もありますが、ほとんどの場合、うまくいくでしょう。 – Tlatis

+0

@gaitatもっと良い解決策はありますか?それは私にとっても非常に役に立つでしょう。 – Tlatis

1

ここでの主な問題は、複数のポイントから3Dメッシュを作成する方法です。言い換えれば、三角形を形成するためにどの頂点を接続するかを理解する必要があります。

これは驚くほど複雑なことです(少なくとも私は驚いたことです)、それについては数多くの科学論文、図書館などがあります。

しかし、あなたの場合は、頂点がどのように接続されるべきかをあなたがすでに知っているので、少し単純です。 earcut-libraryまたはlibtess.jsをご覧ください。どちらも必要な三角形分割を作成できるはずです。

これを取得したら、結果からジオメトリを作成する方法についておおよそ@lior-trau'sの推奨事項に進むことができます。

関連する問題