!---------------------------------------------------------------
!
! TUTORIAL13 - RayDance tutorial script #13.
!
! This script demonstrates tree creation.
!
! Concepts include :
!
!  o Creation of treespecs
!
!  o Generation of trees.
!
!---------------------------------------------------------------

! Use a print statement to display descriptive text on the
! message window.


? "TUTORIAL13 - NOTE:  This script creates several trees\n",
  "that total about 30,000 polygons.  This requires some\n",
  "where around 6 megs of ram to render.  If you have less\n",
  "ram then set the TAPER variable below to a slightly\n",
  "smaller value (good values are 0.95 and higher).\n\n",
  "This script can take a while to execute.  If you are in\n",
  "a hurry use small pixel sizes or wireframe mode.\n\n",
  "The trees here are all grown from the same seed value.\n",
  "BEND and DROOP values are changed.  Trees on the left\n",
  "have a negative DROOP causing them to grow upward.  Trees\n",
  "on the right have a positive droop causing them to droop\n",
  "(like a mangrove or weeping willow).  BEND decreases from\n",
  "left to right.\n\n";


real TAPER = 0.98;


! Create colors for our objects

GRAY   : color(RGB, [.7,.6,.6] );
GREEN  : color(RGB, [.2,.7,0] );
BLUE   : color(RGB, [0,.3,.6] );

! Make up a surface for our objects

!                       ka kd ks  n km kr ir kb flgs
MATTE  : surface(PHONG, .5,.8, 0, 0, 0, 0, 0, 0, 0 );


! Declare a treespec

treespec OUR_TREESPEC;


! Setup the treespec fields

OUR_TREESPEC'FLAGS       = PHONG;
OUR_TREESPEC'DROOP       = -0.2;  ! Grow upward
OUR_TREESPEC'TWIST       = -0.9;
OUR_TREESPEC'BEND        = 0.70;  ! Gnarled branches
OUR_TREESPEC'TAPER       = TAPER;
OUR_TREESPEC'GROWLEN     = 4.0;
OUR_TREESPEC'BRANCHODDS  = 0.80;  ! Fork often
OUR_TREESPEC'BRANCHANGLE = 0.5;
OUR_TREESPEC'FORKDELAY   = 2;
OUR_TREESPEC'MINFORK     = 0.33;
OUR_TREESPEC'TWIGSIZE    = 0.25;
OUR_TREESPEC'TRUNKSURF   = MATTE;
OUR_TREESPEC'TRUNKCOLOR  = GRAY;

!     seed  position  base radius  treespec
tree(  10,  [-90,0,0],    3.0,     OUR_TREESPEC );


! Setup the treespec fields

OUR_TREESPEC'FLAGS       = PHONG;
OUR_TREESPEC'DROOP       = -0.2;  ! Grow upward
OUR_TREESPEC'TWIST       = -0.9;
OUR_TREESPEC'BEND        = 0.40;
OUR_TREESPEC'TAPER       = TAPER;
OUR_TREESPEC'GROWLEN     = 4.0;
OUR_TREESPEC'BRANCHODDS  = 0.80;
OUR_TREESPEC'BRANCHANGLE = 0.5;
OUR_TREESPEC'FORKDELAY   = 2;
OUR_TREESPEC'MINFORK     = 0.33;
OUR_TREESPEC'TWIGSIZE    = 0.25;
OUR_TREESPEC'TRUNKSURF   = MATTE;
OUR_TREESPEC'TRUNKCOLOR  = GRAY;

!     seed  position  base radius  treespec
tree(  10,  [-30,0,0],    3.0,     OUR_TREESPEC );


! Setup the treespec fields

OUR_TREESPEC'FLAGS       = PHONG;
OUR_TREESPEC'DROOP       = 0.2;   ! A droopy tree
OUR_TREESPEC'TWIST       = -0.9;
OUR_TREESPEC'BEND        = 0.30;
OUR_TREESPEC'TAPER       = TAPER;
OUR_TREESPEC'GROWLEN     = 4.0;
OUR_TREESPEC'BRANCHODDS  = 0.80;
OUR_TREESPEC'BRANCHANGLE = 0.5;
OUR_TREESPEC'FORKDELAY   = 2;
OUR_TREESPEC'MINFORK     = 0.33;
OUR_TREESPEC'TWIGSIZE    = 0.25;
OUR_TREESPEC'TRUNKSURF   = MATTE;
OUR_TREESPEC'TRUNKCOLOR  = GRAY;

!     seed  position  base radius  treespec
tree(  10,  [30,0,0],    3.0,     OUR_TREESPEC );


! Setup the treespec fields

OUR_TREESPEC'FLAGS       = PHONG;
OUR_TREESPEC'DROOP       = 0.2;   ! A droopy tree
OUR_TREESPEC'TWIST       = -0.9;
OUR_TREESPEC'BEND        = 0.10;  ! Straighter branches
OUR_TREESPEC'TAPER       = TAPER;
OUR_TREESPEC'GROWLEN     = 4.0;
OUR_TREESPEC'BRANCHODDS  = 0.80;
OUR_TREESPEC'BRANCHANGLE = 0.5;
OUR_TREESPEC'FORKDELAY   = 2;
OUR_TREESPEC'MINFORK     = 0.33;
OUR_TREESPEC'TWIGSIZE    = 0.25;
OUR_TREESPEC'TRUNKSURF   = MATTE;
OUR_TREESPEC'TRUNKCOLOR  = GRAY;

!     seed  position  base radius  treespec
tree(  10,  [90,0,0],    3.0,     OUR_TREESPEC );


! Specify the ambient light.

!       always 0's  lamp color   dir.    k1  k2

ambient( [0,0,0], [0.6,0.6,0.6], [0,0,1], 0, 0 );


! Specify the STAR light.

!         position        lamp color rad  flags

star( [3000,-50000,30000], [1,.9,1], 300, NOSHADOWS );


! A checkerboard ground

!            type   height tile  color  surf   color surf
!                          size  

ground( CHECKERBOARD,  0,   30, GREEN, MATTE, BLUE, MATTE );


! Set the background color to a dark purple

BACKGROUND( PLAIN, [0,0.05,0.15] );


! The camera will be positioned along the negative y axis aiming
! toward the central objects

CAMERA'POS = [0,-320,30];
CAMERA'TARGET = [0,0,20];


! The scene has now been constructed, render it!

RENDER;


! All scripts must terminate with an END

END
