2016-06-13 6 views
0

Anfänger Frage: Ich erstelle einige zufällige Punkte in Java-Skript. Wie kann ich später jeden Einzelnen "anrufen"? Ich glaube, es wurde ein Objekt (die Liste aller Punkte) genannt, wo ich ihre Position in der Liste manipulieren oder die benötigten "ziehen" kann. Wie mache ich das in js?Three.js Liste der zufälligen Punkte

was ist die Zeile:

var dots = []; für? Der Kommentar danach wurde von einer anderen Person hinzugefügt und ich verstehe es nicht.

Wie kann ich eine Linie zwischen zwei Punkten (sagen wir die erste und zweite aus der Liste - die 0 und die 1) in Three.js?

Kompliziertere Frage: Ich erstelle hier X (in diesem Fall 20) zufällige Punkte in Java Script. Ich versuche einen Weg zu finden, wie man Gesichter zufällig mit Gruppen von 3 Punkten erzeugt und ein Netz bildet.

Nun, nicht so zufällig, weil ich ein Ergebnis benötige, wo alle Gesichter in einem kontinuierlichen Netz zusammenbinden. Das Ergebnis sollte wie eine Terrain-Poly-Oberfläche aussehen, die aus den vielen Eckpunkten besteht.

Welche Regeln sollten angewendet werden? 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

Die Gruppierung ist ein wenig schwieriger wegen dem, was man als ein Upface betrachtet (es sei denn du verwendest ein zweiseitiges Material, das intensiver zu verarbeiten ist), ein Upface ist im Uhrzeigersinn um die Achsen, also müsstest du a finden Weg sie als Punkte im Uhrzeigersinn zu untersuchen ... Das ist kompliziert. Aber Sie können einfach Punkte erstellen ('new THREE.Vector3 (x, y, z)'), fügen Sie sie zu einer Geometrie hinzu (new THREE.Geometry.vertices.push (point1, point2, ...)). Um die Flächen zu erstellen, können Sie 'new THREE.Face3 (pointVertexIndex1, pointVertexIndex2, pointVertexIndex3)' verwenden (drücken Sie auf Geometry.faces). – somethinghere

+1

'var dots = [];' ist identisch mit 'var dots = new Array()'. Der Kommentar ist bedeutungslos. –

Antwort

1

Um ein zufälliges Element aus dem Array zu erhalten:

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

Es gibt 2 Verfahren ein Netz von zufälligen Punkten zu erzeugen, die ich kenne: convex hull und alpha shape. Das Erstellen eines Netzes durch wiederholtes Auswählen von 3 zufälligen Punkten würde fast sicher zu Spaghetti führen.

Wenn Sie nur Gelände wie auf dem Bild erzeugen möchten, gibt es terrain generation from heightmap.