2016-06-13 3 views
0

初心者質問: 私はJavaスクリプトでいくつかのランダムな点を作成します。どのように後で私はそれぞれの1つ1つを「呼び出す」ことができますか?私はそれがオブジェクト(すべての点のリスト)と呼ばれ、リスト内の位置を操作したり、必要なものを「引き出す」ことができると信じています。どのように私はjsでそれを行うのですか?用ランダムな点のThree.jsリスト

var dots = [];

ラインは何ですか? それ以降のコメントは他の人から追加されたもので、私はそれを取得しません。

Three.jsの2つの点の間に線を作るにはどうすればいいですか(リストの最初と2番目 - 0と1を考えてみましょう)?

もっと複雑な質問:ここでは、JavaスクリプトのX(この場合は20個)のランダムな点を作成します。私はランダムに3点のグループを使用して顔を作成し、メッシュを形成する方法を見つけようとしています。

私は結果が必要なので、ランダムではありません。すべての顔が連続したメッシュで結びついているからです。結果は、多くの頂点からなる地形のポリサーフェスのように見えるはずです。

どのようなルールを適用する必要がありますか? enter image description here

var numpoints = 20; 
var dots = []; //If you want to use for other task 

for (var i = 0 ; i < numpoints ; i++) { 
    var x = Math.random() * (80 - 1) + 1 //Math.random() * (max - min) + min 
    var y = Math.random() * (80 - 1) + 1 
    var z = Math.random() * (10 - 1) + 1 

    var dotGeometry = new THREE.Geometry(); 
    dots.push(dotGeometry); 
    dotGeometry.vertices.push(new THREE.Vector3(x, y, z)); 
    var dotMaterial = new THREE.PointCloudMaterial({ size: 3, sizeAttenuation: false, color: 0xFF0000 }); 
    var dot = new THREE.PointCloud(dotGeometry, dotMaterial); 
    scene.add(dot); 
} 
+0

アップフェイスとみなされるためグループ化が少し難しくなります(両面材を使用しない限り、私は考えるより激しくなります)、アップフェイスは軸の周りに時計回りにあるので、時計回りの点としてそれらを調べる方法...それは複雑です。しかし、簡単に点を作成し(新しいTHREE.Vector3(x、y、z))、ジオメトリに追加することができます(新しいTHREE.Geometry.vertices.push(point1、point2、...))。面を作成するには、 '新しいTHREE.Face3(pointVertexIndex1、pointVertexIndex2、pointVertexIndex3)'(Geometry.facesにプッシュ)を使用できます。 – somethinghere

+1

'var dots = [];'は 'var dots = new Array()'と同じです。コメントは無意味です。 –

答えて

1

は、配列からランダムな要素を取得するには: convex hullalpha shape

function randChoice(array){ 
    return array[Math.floor(Math.random()*array.length)]; 
}; 

は、私の知っているランダムな点からメッシュを生成するために、2の方法があります。 3つのランダムな点を選んで繰り返してメッシュを作成すると、スパゲッティが発生します。

画像のように地形を生成したい場合は、terrain generation from heightmapがあります。

関連する問題