xxxxxxxxxx
64
const N = 28; // Number of objects. max uniforms passed to shader is 1024
let objects = [];
let myShader;
const u_radius = 0.5;
MAX_POINTS = N;
var center;
function preload() {
// Load the shader
myShader = loadShader("vertex.vert", "fragment.frag");
}
pushed = 0;
function setup() {
createCanvas(windowWidth, windowHeight, WEBGL);
center = createVector(0.5, 0.5);
}
function draw() {
if (pushed < N) {
objects.push({
p: createVector(0.5, 0.5),
v: p5.Vector.random2D()
.mult(random(0.005, 0.01))
.setHeading((pushed / 100) * PI),
});
pushed++;
}
shader(myShader);
myShader.setUniform("u_canvasSize", [float(width), float(height)]);
myShader.setUniform("u_radius",u_radius);
let xCoords = new Float32Array(MAX_POINTS);
let yCoords = new Float32Array(MAX_POINTS);
// Update and send objects data to shader
for (let i = 0; i < pushed; i++) {
let obj = objects[i];
xCoords[i] = obj.p.x;
yCoords[i] = obj.p.y;
if (!(obj.p.dist(center) < u_radius)) {
obj.v.mult(-1);
}
obj.p.add(obj.v);
}
myShader.setUniform(`yCoords`, xCoords);
myShader.setUniform(`xCoords`, yCoords);
// Apply rotation
// rotateZ(frameCount ); // Rotate around Z-axis
quad(-1, -1, 1, -1, 1, 1, -1, 1);
}