VR-Procedural-Generated-Forest/sketch.js

100 lines
1.5 KiB
JavaScript

let n = 0, randomX = [], randomY = [], randomS = [];
var rn;
let tree
let branchLength = 100
let minimumWeight = 0.03
let iteration = 15
function preload() {
createVRCanvas();
}
function setup() {
setVRBackgroundColor(200, 200, 200);
noStroke();
//calculate random positions for trees
for(let i=0; i<iteration; ++i) {
randomX[i] = random(-175, 175);
randomY[i] = random(-175, 175);
randomS[i] = random(15, 20);
}
angleMode(DEGREES)
//random seed for each respawn
rn = random(1,1000)
}
function draw() {
n = n + deltaTime/30;
setViewerPosition(0, 10, 350-n);
//respawn
if(n>=550){
n=0;
setup();
}
//draw plane
noStroke();
rotateX(90);
fill(0, 160, 0);
plane(5000, 5000);
fill(128, 128, 0);
rotateX(-90)
//draw trees
for(let i = 0; i<iteration;i++){
randomSeed(rn+i)
translate(randomX[i],0,randomY[i])
branch(randomS[i]);
translate(0,-randomS[i],0)
translate(-randomX[i],0,-randomY[i])
}
}
function branch(len) {
strokeWeight(map(len,10,30,0.5,5))
stroke(70,40,20)
line(0,0,0,0,len,0)
translate(0,len,0)
if(len > 10 ){
//stem/branch
for(var i=0;i<3;i++){
rotateY(random(100,140));
push();
rotateZ(random(20,50));
branch(len *0.7);
pop();
}
} else {
//leaf
var r = 80 + random(-20,20)
var g = 120+ random(-20,20)
var b = 40+ random(-20,20)
fill(r,g,b,200);
noStroke()
translate(5,0,0)
rotateZ(90)
triangle(-5,-5,5,5,-5,5)
}
}