2015-12-09 67 views
0

阅读外观极好问题关于随机填充一个球体的表面颗粒How to make a sphere made out of random particles in three.js。我如何用随机生成的粒子填充球体的总体积?我试试看:如何填补随机粒子的球体在three.js所

var particleCount = 1800, 
    particles = new THREE.Geometry(), 

    pMaterial = new THREE.PointCloudMaterial({ 
    color: 0xFFFFFF, 
    size: 20, 
    map: THREE.ImageUtils.loadTexture(
     "images/particle.png" 
    ), 
    blending: THREE.AdditiveBlending, 
    transparent: true 
    }); 

for (var t = 0; t < particleCount; t++) { 
    var angle3 = Math.random() * Math.PI * 2; 
    var radius3 = Math.random() * 350 + 1; 
    var pX1 = Math.cos(angle3) * radius3, 
    pY1 = Math.random() * 70 - 35, 
    pZ1 = Math.sin(angle3) * radius3, 
    skparticle11 = new THREE.Vector3(pX1, pY1, pZ1); 
    particles.vertices.push(skparticle11); 
} 

var particleSystem = new THREE.PointCloud(
    particles, 
    pMaterial); 

// add it to the scene 
scene.add(particleSystem); 

但我只是得到一个磁盘。如何使球体充满粒子?

+1

您是否需要将粒子均匀分布? – andars

+0

[在球形体积内采样均匀分布的随机点]可能的重复(http://stackoverflow.com/questions/5408276/sampling-uniformly-distributed-random-points-inside-a-spherical-volume) –

+0

我是现在去读它 –

回答

3

一个角度是不够的,这就是为什么你得到一个磁盘

创建一个随机法线

var randomDirection = new THREE.Vector3(Math.random()-0.5,Math.random()-0.5,Math.random()-0.5).normalize(); 

你之前

var radius3 = Math.random() * 350 + 1; 

随机点确实创造了随机距离在原点附近的球体上将会是

var randomParticle = randomDirection.multiplyScalar(radius3); 

为了更好的分配使用一些比Math.random更好的发生器