xxxxxxxxxx
118
let theShader;
let shaderBG;
let pointBG;
let secs;
let triangles = [];
let normals = [];
function preload(){
theShader = loadShader('shader.vert','shader.frag');
}
function setup() {
createCanvas(400, 400);
shaderBG = createGraphics(width,height,WEBGL);
pointBG = createGraphics(width,height);
pointBG.background(255);
const rast=30;
for(let i=rast/2;i<width;i+=rast){
for(let j=rast/2;j<height;j+=rast){
pointBG.point(i,j);
}
}
for(let i=0;i<30;i++){
addTriangle(0,80);
}
noCursor();
// shaderBG.noStroke();
}
function draw() {
secs = millis()*0.001;
if(mouseIsPressed){
addTriangle(1,150);
}
image(pointBG,0,0,width,height);
shaderBG.push();
shaderBG.shader(theShader);
theShader.setUniform('time', secs);
shaderBG.background(255,0);
shaderBG.rotateY(secs);
shaderBG.rotateX(secs*0.5);
shaderBG.translate(sin(secs)*50,cos(secs*1.1)*30)
// shaderBG.sphere(120,24,24);
shaderBG.beginShape(TRIANGLES);
for(let i=0;i<triangles.length;i++){
shaderBG.normal(normals[i])
for(let j=0;j<3;j++){
shaderBG.vertex(triangles[i][j].x,
triangles[i][j].y,
triangles[i][j].z);
}
}
shaderBG.endShape();
image(shaderBG,0,0,width,height)
shaderBG.pop();
rect(mouseX-12.5*cos(secs), mouseY-12.5*sin(secs*1.2), 25*cos(secs), 25*sin(secs*1.2))
}
function addTriangle(method,scalar){
if(method==0){
//pure random triangles
triangles.push(
[
p5.Vector.random3D().mult(scalar),
p5.Vector.random3D().mult(scalar),
p5.Vector.random3D().mult(scalar)
]
)
}
if(method==1){
//along a sphere
let center = p5.Vector.random3D().mult(2);
triangles.push(
[
p5.Vector.add(center, p5.Vector.random3D()).normalize().mult(scalar),
p5.Vector.add(center, p5.Vector.random3D()).normalize().mult(scalar),
p5.Vector.add(center, p5.Vector.random3D()).normalize().mult(scalar)
]
)
normals.push(center.copy());
}
// theres smth wrong with my normal math lmao
// ah motherfucker of course they can point either way depending on which one i start bc its the cross product yuck. so in this case i would want one the one pointing away fromthe center but like that shitis gona vary from case to case so idk
let u = p5.Vector.sub(triangles[triangles.length-1][1], triangles[triangles.length-1][0]);
let v = p5.Vector.sub(triangles[triangles.length-1][2], triangles[triangles.length-1][0]);
normals.push(createVector(
u.y*v.z - u.z*v.y,
u.z*v.x - u.x*v.z,
u.x*v.y - u.y*v.x).normalize()
);
}