-
Notifications
You must be signed in to change notification settings - Fork 3
ExampleTree
Li, Xizhi edited this page Aug 21, 2017
·
2 revisions
-- generate a random tree
local function random(min_value, max_value)
return min_value + math.random()*(max_value - min_value);
end
function make_tree(level, length, last_radius, leave_size)
last_radius = last_radius or length*0.2;
local radius = last_radius*0.5;
if(level>1) then
-- branch
color("brown")
cylinder({ r1 = last_radius, r2 = radius, h = length})
translate(0, length, 0)
for i = 1, math.random(2, 3) do
push()
if(i>1) then
rotate({random(10, 45), random(0, 360), 0})
end
make_tree(level-math.random(1,2), length*random(0.5,0.9),radius,leave_size);
pop()
end
else
-- tree leaves
color("green")
scale(leave_size)
local leave_count = random(2, 6)
cube(leave_count*0.5);
for i=1, leave_count do
push()
translate(random(-leave_count,leave_count), random(-leave_count,leave_count), random(-leave_size,leave_size))
cube(leave_count*0.5);
pop()
end
end
end
scale(1/5)
math.randomseed(12345678);
make_tree(6, 4, 0.5, 0.3);function make_tree(level, length, last_radius, leave_size)
last_radius = last_radius or length*0.2;
if(level>1) then
-- branch
color("brown")
cylinder({ r1 = last_radius, r2 = last_radius*0.5, h = length})
translate(0, length, 0)
for i = 1, math.random(2, 3) do
push()
rotate({math.random(10, 45), math.random(0, 360), 0})
make_tree(level-math.random(1,2), length*0.5,last_radius*0.5,leave_size);
pop()
end
else
-- tree leaves
color("green")
cube(leave_size);
end
end
make_tree(6, 4, 0.5, 0.3);