3D Tree Example Code
(define (draw-trunk)
(separator
(rotate -90 (vec3 1 0 0))
(cylinder 'radius .1)
))
(define (draw-leaf)
(separator
(color (vec3 0 .5 0))
(rotate 45 (vec3 1 0 0))
(scale (vec3 .125 .25 .125))
(translate (vec3 0 1 0))
(disk)
))
(define (randR low high) (+ low (* (rand) (- high low))))
(define (tree depth)
(if (> depth 0)
; create a branch
(separator
(draw-trunk)
(separator
(translate (vec3 0 1 0))
(rotate (+ 0 (randR -30 30)) (vec3 0 1 0))
(rotate (+ 22.7 (randR -15 15)) (vec3 0 0 1))
(uscale (+ .8 (randR -.1 .1)))
(tree (- depth 1))
)
(separator
(translate (vec3 0 1 0))
(rotate (+ 120 (randR -30 30)) (vec3 0 1 0))
(rotate (+ 22.7 (randR -15 15)) (vec3 0 0 1))
(uscale (+ .8 (randR -.1 .1)))
(tree (- depth 1))
)
(separator
(translate (vec3 0 1 0))
(rotate (+ 240 (randR -30 30)) (vec3 0 1 0))
(rotate (+ 22.7 (randR -15 15)) (vec3 0 0 1))
(uscale (+ .8 (randR -.1 .1)))
(tree (- depth 1))
)
)
; else return a leaf
(draw-leaf)
)
)
Return to 3D Tree
mrl