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