media @ VU
[] readme course preface I 1 2 II 3 4 III 5 6 7 IV 8 9 10 V 11 12 afterthoughts appendix references examples resources _

talk show tell print

web3d-x-ball-5.vr

web3d-x-ball-5.vr (wrl ) [ flux / bitmanagement / cortona / octaga ]

Web3D/VR

bouncing ball (5)

proto bounce


  
  PROTO bounce [
  exposedField SFFloat accel 0.1
  ]{
  Transform {
  children [
  Transform {
  translation 0 -10 0
  children [
  Shape {
           geometry Box { size 5 0.2 5 }
           appearance Appearance {
                  material DEF GROUND Material {
                          diffuseColor 1  0 0
                          }
                  }
  }
  ]}
  
  

object


        
  DEF OBJECT Transform {
  scale 0.5 0.5 0.5
  children [ 
  Shape  {
          geometry Sphere { radius 1 }
          appearance Appearance {
                  material DEF MATERIAL Material {
                          diffuseColor 1 0 0
                          }
                  }
  }
  ] }
  ] }
  
  

sensor


  DEF TIME TimeSensor { loop TRUE cycleInterval 5 } #<l++>
  
  

script


  DEF SCRIPT Script {   
          directOutput TRUE
  
          field SFFloat accel IS accel
  
          field  SFTime  tick   0
  
          field SFNode object USE OBJECT
          field SFNode material USE MATERIAL
          field SFNode ground USE GROUND
          field SFFloat position 0
          field SFFloat color 0.5
  
          field SFInt32 sign 1
          field SFFloat speed 1
  
          eventIn SFFloat set_fraction    
          url "javascript:
  
  

fraction


  
          function set_fraction(value) { 
          if (tick == 0) {
                    tick = value;
                    position = 0;
                    color = 0.5;
                }
                while (tick < value) {
                    update(value);
                    tick = tick + 0.05;
                }
          tick = value;
          }
  
  

update


          function update(value) {
                  position += 0.01 * sign * speed;
                  color = value;
  
                  speed = speed * ( 1  - sign * accel); 
  
                  object.translation.y = position;
                  material.diffuseColor = new SFColor(1,color,color);
  
                  if (speed < 0.1 ) sign = -1; 
                  if (position < -9) {
                           effect(value);
                           sign = 1;
                           } 
                  }
  

effect


          function effect(value) {
                  ground.diffuseColor = new SFColor(1,color,color);
                  }
                  "
          }#<l++>
  

routing


  ROUTE TIME.fraction_changed TO SCRIPT.set_fraction
  }
  
  

bounce instances


  
  Transform {
  translation -12 0 0
  children [
  bounce { accel 0.1  }
  ] }
  
  Transform {
  translation 0 0 0
  children [
  bounce { accel 0.2  }
  ] }
  
  Transform {
  translation 12 0 0
  children [
  bounce { accel 0.3  }
  ] }
  
  Transform {
  translation -6 0 -10
  children [
  bounce { accel 0.4  }
  ] }
  
  Transform {
  translation 6 0 -10
  children [
  bounce { accel 0.5  }
  ] }
  
  

environment


  
  DirectionalLight { direction         0 -1 -1  }
  Viewpoint { position 0 0 30 }
  Background { skyColor 0.2 0.2 0.4 }
  
  


(C) A. Eliëns 21/5/2007

You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.