2016-06-13 37 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