xxxxxxxxxx
71
let therock = []
function rand_v4(line_min = 10, line_max = 100) {
let p1 = createVector(0, 0, 0);
let p2 = createVector(random(line_min,line_max), 0, 0)
let p3 = createVector(random(p2.x), random(line_min, line_max), 0)
let p4 = createVector(p3.x, random(p3.y), random(line_min, line_max))
// let volume = p2.x * p3.y * p4.z / 6
let centroid = createVector((p1.x+p2.x+p3.x+p4.x)/4,
(p1.y+p2.y+p3.y+p4.y)/4,
(p1.z+p2.z+p3.z+p4.z)/4)
return [p1.sub(centroid), p2.sub(centroid),
p3.sub(centroid), p4.sub(centroid)]
}
function fnorm(p1, p2, p3) {
let a = p5.Vector.sub(p2,p1)
let b = p5.Vector.sub(p3,p2)
let n = p5.Vector.cross(a, b)
let s = (n.dot(p1) > 0 ? 1 : -1)
return n.mult(s)
}
function drawFace(f) {
beginShape()
normal(f[3].x, f[3].y, f[3].z)
vertex(f[0].x, f[0].y, f[0].z)
vertex(f[1].x, f[1].y, f[1].z)
vertex(f[2].x, f[2].y, f[2].z)
endShape(CLOSE)
}
function reg_v4() {
let p1 = createVector( 1, -1, 1)
let p2 = createVector(-1, -1, -1)
let p3 = createVector( 1, 1, -1)
let p4 = createVector(-1, 1, 1)
return [p1, p2, p3, p4]
}
function setup() {
createCanvas(400, 400, WEBGL);
noStroke()
let [p1, p2, p3, p4] = rand_v4(50, 150)
therock[0] = [ p2, p3, p4, fnorm(p2, p3, p4) ]
therock[1] = [ p1, p4, p3, fnorm(p1, p4, p3) ]
therock[2] = [ p1, p2, p4, fnorm(p1, p2, p4) ]
therock[3] = [ p1, p3, p2, fnorm(p1, p3, p2) ]
}
function draw() {
background(0)
rotateX(frameCount*0.003)
rotateY(frameCount*0.005)
ambientMaterial(0,150,0)
directionalLight(255,255,255,0,0,-1)
drawFace(therock[0])
drawFace(therock[1])
drawFace(therock[2])
drawFace(therock[3])
}