6

答えが盲目的に明白であるかどうかはわかりませんが、私にはわかりません。three.js を使用する Udacity で 3D Graphics クラスを実行しています。3D メッシュを生成する必要があるところまで来ました。

頂点はすべて正しく生成されていますが、面の生成に行き詰まっています。重ならない面を自動生成する明確な方法が思い浮かびません。ネットでいろいろと調べてみましたが、それに関する情報が見つかりません。それがばかばかしいほど明白なものなのか、それともあまり文書化されていないだけなのかはわかりません。コードは次のとおりです。

function PolygonGeometry(sides) {
    var geo = new THREE.Geometry();

    // generate vertices
    for ( var pt = 0 ; pt < sides; pt++ )
    {
        // Add 90 degrees so we start at +Y axis, rotate counterclockwise around
        var angle = (Math.PI/2) + (pt / sides) * 2 * Math.PI;

        var x = Math.cos( angle );
        var y = Math.sin( angle );

        // YOUR CODE HERE
        //Save the vertex location - fill in the code
        geo.vertices.push( new THREE.Vector3(x, y, 0) );
    }
    // YOUR CODE HERE
    // Write the code to generate minimum number of faces for the polygon.


    // Return the geometry object
    return geo;
}

面の最小数の基本式は n-2 であることを知っています。しかし、顔が重ならないようにする方法が思いつきません。誰にも仕事を任せたくないので、できる限り自分で解決したいと思っています。しかし、私を正しい方向に向けたり、公式などを教えてくれる人はいますか?

4

2 に答える 2

12

三角測量を自動化できます

大きなポリゴンの場合、面を手動で追加するのは大変な作業です。次のようなtriangulateShapeメソッドを使用して、メッシュに面を追加するプロセスを自動化できます。THREE.Shape.Utils

var vertices = [your vertices array]
var holes = [];
var triangles, mesh;
var geometry = new THREE.Geometry();
var material = new THREE.MeshBasicMaterial();

geometry.vertices = vertices;

triangles = THREE.Shape.Utils.triangulateShape ( vertices, holes );

for( var i = 0; i < triangles.length; i++ ){

    geometry.faces.push( new THREE.Face3( triangles[i][0], triangles[i][1], triangles[i][2] ));

}

mesh = new THREE.Mesh( geometry, material );

vertices頂点の配列はどこにありholes、ポリゴンに穴を定義できます。

注:ポリゴンが自己交差している場合、エラーがスローされることに注意してください。頂点配列が有効な (交差していない) ポリゴンを表していることを確認してください。

于 2014-03-17T15:58:05.963 に答える
4

頂点を凹状に反時計回りに生成すると仮定すると、3 つの側面 (三角形) がある場合は、頂点 0 を 1 と 2 で接続します。4 つの側面 (四角形) がある場合は、頂点 0 と 1 を 2 で接続します (最初の三角形)、次に頂点 0 と 2 と 3。5 つの側面 (五角形) がある場合は、頂点 0 と 1 を 2 に接続し (最初の三角形)、次に頂点 0 と 2 を 3 に接続します (2 番目の三角形、次に頂点 0 と 3 と 4 を接続します)。 . パターンがわかると思います。

于 2013-04-03T19:47:06.073 に答える