tut44b.wrl

#VRML V2.0 utf8

WorldInfo {
   title "Floppy's VRML97 Tutorial Example 4.4b"
   info ["(C) Copyright 2000 Vapour Technology Ltd."
         "guide@web3dguide.org.uk"]
}

NavigationInfo {
   type ["EXAMINE"]
}

Viewpoint {
   description "Default View"
   position 0 0 3
}

Shape {
   appearance Appearance {
      material Material {
         diffuseColor 1 1 1
      }
   }
   geometry Sphere {
      radius 0.05
   }
}

Group {
   children [
      DEF SENSOR1 SphereSensor {
      }
      DEF VECTOR1 Transform {
         children [
            Transform {
               translation 0 0.5 0
               children [
                  Shape {
                     appearance Appearance {
                        material Material {
                           diffuseColor 1 0 0
                        }
                     }
                     geometry Cylinder {
                        height 1
                        radius 0.03
                     }
                  }
               ]
            }
         ]
      }
   ]
}

Group {
   children [
      DEF SENSOR2 SphereSensor {      
      }
      DEF VECTOR2 Transform {
         children [
            Transform {
               translation 0 0.5 0
               children [
                  Shape {
                     appearance Appearance {
                        material Material {
                           diffuseColor 0 1 0
                        }
                     }
                     geometry Cylinder {
                        height 1
                        radius 0.03
                     }
                  }
               ]
            }
         ]
      }
   ]
}

DEF CROSSVECTOR Transform {
   children [
      Transform {
         translation 0 0.5 0
         children [
            Shape {
               appearance Appearance {
                  material Material {
                     diffuseColor 0 0 1
                  }
               }
               geometry Cylinder {
                  height 1
                  radius 0.03
               }
            }
         ]
      }
   ]
}

DEF CROSS Script {
   eventIn  SFRotation  vector1_rotation_changed
   eventIn  SFRotation  vector2_rotation_changed
   field    SFVec3f     vector1  0 1 0
   field    SFVec3f     vector2  0 1 0
   eventOut SFRotation  crossvector_set_rotation
   eventOut SFVec3f     crossvector_set_scale
   url "javascript:
      function calc_cross_product() {
         var crossVec = vector1.cross(vector2);
         var crossVecLength = crossVec.length();
         if (crossVecLength < 0.001) crossVecLength = 0.001;
         crossvector_set_scale = new SFVec3f(1,crossVecLength,1);
         var unitVec = new SFVec3f(0,1,0);
         crossvector_set_rotation = new SFRotation(unitVec,crossVec);
      }
      function initialize() {
         calc_cross_product();
      }
      function vector1_rotation_changed(value,time) {
         var unitVec = new SFVec3f(0,1,0);
         vector1 = value.multVec(unitVec);
      }
      function vector2_rotation_changed(value,time) {
         var unitVec = new SFVec3f(0,1,0);
         vector2 = value.multVec(unitVec);
      }
      function eventsProcessed() {
         calc_cross_product();
      }
   "
}

ROUTE SENSOR1.rotation_changed TO VECTOR1.rotation
ROUTE SENSOR1.rotation_changed TO CROSS.vector1_rotation_changed
ROUTE SENSOR2.rotation_changed TO VECTOR2.rotation
ROUTE SENSOR2.rotation_changed TO CROSS.vector2_rotation_changed
ROUTE CROSS.crossvector_set_rotation TO CROSSVECTOR.set_rotation
ROUTE CROSS.crossvector_set_scale TO CROSSVECTOR.set_scale
Generated by GNU enscript 1.6.1.