particles = {
const particleGeometry = new THREE.BufferGeometry();
const positions = new Float32Array(particleCount * 3);
for (let i = 0; i < particleCount; i++) {
positions[i * 3] = random(0, 1) * size0 * columns;
positions[i * 3 + 1] = random(0, 1) * size0 * rows;
positions[i * 3 + 2] = random(0, 1) * size0 * depths;
}
const velocityVector = new Float32Array(particleCount * 3);
for (let i = 0; i < particleCount; i++) {
velocityVector[i * 3] = random(-1, 1);
velocityVector[i * 3 + 1] = random(-1, 1);
velocityVector[i * 3 + 2] = random(-1, 1);
}
particleGeometry.setAttribute(
"position",
new THREE.BufferAttribute(positions, 3)
);
particleGeometry.setAttribute(
"acceleration",
new THREE.BufferAttribute(accelerationVector, 3)
);
particleGeometry.setAttribute(
"velocity",
new THREE.BufferAttribute(velocityVector, 3)
);
const particleMaterial = new THREE.PointsMaterial({
color: 0xffffff,
size: 0.05
});
const shaderMaterial = new THREE.ShaderMaterial({
vertexShader: vertexShader,
fragmentShader: fragmentShader,
transparent: true,
depthTest: false,
depthWrite: false,
blending: THREE.AdditiveBlending
});
const particleSystem = new THREE.Points(particleGeometry, shaderMaterial);
return particleSystem;
}