3

私は本当にすべての例を試し、ウェブを何時間も検索しましたが、うまくいかないようです!

そこで、雪が降るのをシミュレートする小さなパーティクル システムを次のように実装しようとしました

しかし、私はそれ全体にしかアクセスできません。つまり、そのまま回転できますが、頂点を反復しようとするとすぐに、アニメーション全体がしゃっくりになります! ここで助けていただければ幸いです。

-

重要な部分は次のとおりです。

-> パーティクル システムの設定:

var partikelGeo = new THREE.Geometry();
    var partikelMaterial = new THREE.ParticleBasicMaterial({
        color:0xffffff,
        size: 10,
        map: THREE.ImageUtils.loadTexture('snowflake2.png'),
        blending: THREE.AdditiveBlending,
        transparent:true
        });

        var partikelAnzahl = 3500;


        for (var p = 0; p < partikelAnzahl; p++) {

            var pX = Math.random() * 1000 -500;
            var pY = Math.random() * 1000 -500;
            var pZ = Math.random() * 1000 -500;

            var partikel = new THREE.Vertex(new THREE.Vector3(pX,pY,pZ));

            partikel.velocity = new THREE.Vector3(0,-Math.random(),0);

            partikelGeo.vertices.push(partikel);



        }   



    var partikelSystem = new THREE.ParticleSystem(partikelGeo, partikelMaterial);
    partikelSystem.sortParticles = true;
    scene.add(partikelSystem);

-> マウスクリック時のレンダリングとアニメーション

var frame = 0;

        function animate(){

        // request new frame
        requestAnimationFrame(function(){
            animate();
        });

        // render
        render();
  }

animate();


        var check = 0;

        onmousedown = function(){

            if (check) {
                check = 0;
            }else{
                check = 1;
            }

        }

        function render() {

              if (check) {
                clickDo();
              }


            camera.lookAt(new THREE.Vector3(0,0,0));

             renderer.render(scene,camera);

        }




        function clickDo() {
            frame++;

    partikelSystem.rotation.y += 0.01;


    var pCount = partikelAnzahl;
        while(pCount--) {

          // get the particle
          var particle =
        partikelGeo.vertices[pCount];

          // check if we need to reset
          if(particle.position.y < -200) {
        particle.position.y = 200;
        particle.velocity.y = 0;
          }

          // update the velocity with
          // a splat of randomniz
          particle.velocity.y -=
        Math.random() * .1;

          // and the position
          particle.position.addSelf(
        particle.velocity);
        }

        // flag to the particle system
        // that we've changed its vertices.
        partikelSystem.
          geometry.
          __dirtyVertices = true;       




        }

ラー

4

1 に答える 1

0

あなたのコードは私には良さそうです。加算ブレンディングを使用するときは、パーティクルをソートしないことをお勧めします。

partikelSystem.sortParticles = false;

于 2013-07-15T18:02:16.410 に答える