2016-10-13 6 views
2

three.jsのパーティクルシステムを使用して円の形を作成したいとします。私はParticleCanvasMaterialとTexture(プログラム:関数)を使用するもののいくつかをチェックしましたが、そのものはもはやサポートされていません。私は、座標系を経て、PX、の値を設定しようとしましたが、それはうまくええ、ここに私のコードは、任意のヘルプは..パーティクルを使用した形状の作成

おかげ

  var scene, camera, renderer; 
      var controls, guiControls, datGUI; 
      var spotLight, texture; 
      var particleCount = 1800; 
      var particles, pMaterial, particleSystem; 
      var win_h = $(document).height(); 
      var win_w = $(document).width(); 

      function init() { 

       scene = new THREE.Scene(); 
       camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000); 

       renderer = new THREE.WebGLRenderer(); 
       renderer.setClearColor(0xB0C5E6); 
       renderer.setSize(win_w, win_h); 
       renderer.shadowMap.enabled = true; 
       renderer.shadowMapSoft = true; 

       controls = new THREE.OrbitControls(camera, renderer.domElement); 
       controls.addEventListener('change', render); 

       var canvas = document.createElement('canvas'); 
       canvas.width = 100; 
       canvas.height = 100; 

       var context = canvas.getContext('2d'); 
       context.beginPath(); 
       context.arc(0, 0, 1, 0, Math.PI * 2, true); 
       context.fill(); 

       particles = new THREE.Geometry(); 
       texture = new THREE.TextureLoader().load('ry.png'); 
       pMaterial = new THREE.PointsMaterial({ 
        color: 0xB0C5E6, 
        size: 6, 
        map: texture, 
        blending: THREE.AdditiveBlending, 
        transparent: true 

       }); 


       for (var p = 0; p < particleCount; p++) { 
        var pX = (p * win_w)/ particleCount ; 
        var pY = 5; 
        var pZ = Math.random() * 500 - 750; 
        particle = new THREE.Vector3(pX, pY, pZ); 



        particles.vertices.push(particle); 
       } 

       particleSystem = new THREE.Points(particles, pMaterial); 

       $('#webGL-con').append(renderer.domElement); 

       scene.add(particleSystem); 

      } 


      function render() { 

       requestAnimationFrame(render); 

      } 

      function animate() { 

       render(); 
       renderer.render(scene, camera); 
       controls.update(); 
       requestAnimationFrame(animate); 
      } 

      init(); 
      animate(); 
+0

あなたの質問は本当に明確ではありません。パーティクルテクスチャとしてサークルを使用しようとしているのですか、またはパーティクルを円で配布しようとしていますか?後者の場合は、「円のパラメトリック方程式」を調べる必要があります。この場合、円/弧の形に粒子を配置する方法を理解できるはずです。 EllipseCurveを使用して、生成された頂点を取得することもできます。 – msun

+1

さて、私は1000個の粒子を持っていて、その粒子で円や三角形を形成しなければならないとしましょう。[リンク](http://william.hoza.us/text/?t=Hello)@msu – janmesh007

答えて

0

まあが理解されるであろうが、うまくいきませんでした円でパーティクルを設定したいだけなら、それはむしろ簡単です。この場合

var ratio = steps/(Math.PI*2) 
for (var i = 0; i < steps; i ++) { 
    var x = basePoint.x + radius * Math.cos(i/ratio); 
    var y = basePoint.y; 
    var z = basePoint.z + radius * Math.sin(i/ratio)); 
    particles.vertices.push(new THREE.Vector3(x,y,z)); 
} 

基点例えばTHREE.Vector3ような円の中心を(記​​述ベクター、またはキーXと任意のオブジェクト、Y、Zである:xz平面上の円のセットのためにこれらの使用します)。比率は、ポイントの密度(またはその間の距離)を定義するために使用され、ステップは、設定するパーティクルの数です。別の形状が必要な場合は、ループでそれらを描く方法を理解する必要があります。数学的関数を見てみると、それらはあなたを助けます。

+0

ここの手順は参考になりますいいえ。粒子のrigth?私は試みましたが、全く同じではありませんでしたが、私は基本的な考え方を得ました... tq。 – janmesh007

+0

今試してみると、そこに誤りがあるようです。実際にはちょうど同じことをしていましたが、私は自分の解決策を模索しましたが、特定のケースでしか動かないことを認識していませんでした。そしてええ、ステップは粒子の数を指します –

関連する問題