2016-06-23 8 views
-1

Neuling in 3D-Welt. Es wird versucht, Partikel so darzustellen, wie sie erstellt wurden, damit diese 2000 Partikel so gerendert werden, wie sie erstellt wurden. Aber von unten Code rendert es nur einmal alle Partikel erstellt werden.Inkrementelles Rendering von Particals in THREE.js

Ausprobiert paar Variationen, aber kein Glück. Jede Hilfe wird geschätzt.

<script> 
    var scene = new THREE.Scene(); 
    var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 

    camera.position.z = 255; 

    var renderer = new THREE.WebGLRenderer(); 
    renderer.setSize(window.innerWidth, window.innerHeight); 
    document.body.appendChild(renderer.domElement); 

    var particles = new THREE.Geometry; 

    for (var p = 0; p < 2000; p++) { 
    var particle = new THREE.Vector3(Math.random() * 500 - 250, Math.random() * 500 - 250, Math.random() * 500 - 250); 
     particles.vertices.push(particle); 
    } 

    var particleMaterial = new THREE.ParticleBasicMaterial({ color: 0xeeeeee, size: 2 }); 
    var particleSystem = new THREE.ParticleSystem(particles, particleMaterial); 

    scene.add(particleSystem); 

    function render() { 
     requestAnimationFrame(render); 
     particleSystem.rotation.y += 0.01; 
     renderer.render(scene, camera); 
    } 
    render(); 

    </script> 
+0

?? Sie scheinen die Schleife auszuführen, die die Partikel hinzufügt, bevor die Geometrie der Szene hinzugefügt und die Renderfunktion aufgerufen wird. Selbst wenn Sie die Geometrie vor der Schleife hinzufügen und das Rendern beim Hinzufügen jedes Partikels aufrufen, geschieht dies so schnell, dass alle Partikel gleichzeitig zur gleichen Zeit hinzugefügt werden. – 2pha

+0

Gibt es irgendeine Schlafart? –

+0

[setInterval()] (http://www.w3schools.com/jsref/met_win_setinterval.asp) oder [setTimeout()] (http://www.w3schools.com/jsref/met_win_settimeout.asp) – 2pha

Antwort

0

Sie können eine Teilmenge von Ihnen Partikel machen (jetzt THREE.Points genannt) durch BufferGeometry und Einstellen des Streckbereichs verwendet wird.

var geometry = new THREE.BufferGeometry(); 

geometry.setDrawRange(startIndex, count); 

Sie können den Zeichenbereich innerhalb Ihrer Animationsschleife zurücksetzen.

Informationen zum Füllen der Geometrie und einer Live-Demo finden Sie unter this answer.

three.js r.78

+0

hey WestLangley. .ist es Ihnen möglich, meinen Code mit Ihren Vorschlägen zu ändern? Ich bekomme deine Antwort nicht. Ich kann Arbeitslösung betrachten und dann den Fluss verstehen –