2016-06-13 98 views
0

初學者問題: 我在java腳本中創建了一些隨機點。我怎樣才能稍後「打電話」他們中的每一個?我相信它被稱爲對象(所有點的列表),我可以在列表中操縱它們的位置或「拉」我需要的位置。我如何在js中做到這一點?Three.js隨機點列表

什麼是行:

var dots = [];呢? 之後的評論是從另一個人添加的,我不明白。

如何在Three.js中的兩點之間(假設第一個和第二個來自列表 - 0和1)?

更復雜的問題:我在這裏創建X(在這種情況下20)Java腳本中的隨機點。我試圖找出一種方法來隨機創建使用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

由於什麼被認爲是一個upface(除非你使用雙面材料,這是更強烈的處理我認爲),一個正面是圍繞軸線順時針旋轉,所以你將不得不找到一個以順時針方向檢查它們的方式......這很複雜。但你可以很容易地創建點('new THREE.Vector3(x,y,z)'),將它們添加到幾何體(new THREE.Geometry.vertices.push(point1,point2,...))。要創建面孔,可以使用'new THREE.Face3(pointVertexIndex1,pointVertexIndex2,pointVertexIndex3)'(push to Geometry.faces)。 – somethinghere

+1

'var dots = [];'與'var dots = new Array()'相同。評論是沒有意義的。 –

回答

1

爲了從陣列得到一個隨機元素:

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

有2個方法來生成從我知道的隨機點的網狀: convex hullalpha shape。通過重複挑選3個隨機點來創建網格幾乎肯定會導致意大利麪條。

如果您只想生成如圖所示的地形,則有terrain generation from heightmap