script


          url "javascript:
          
          // compute equal spaced 3D grid coordinates, based on bbox
          function computeGridCoord(nu,nv,nw) 
          { var u,v,w;
                  var x,y,z;
            
                  var bmin = bboxCenter.subtract(bboxSize.multiply(0.5));
            
                  //var pts = new MFVec3f();
                  var ptsi=0;
          
                  pts.length = nw*nv*nu;
            
                  for(w=0; w<nw;w++) {
  			z=bmin.z + bboxSize.z * w/(nw-1);
  		
  	  		for(v=0; v//particles[ptsi]=new SFNode('Transform {}');
  					//particles[ptsi].set_children = particleObjects;
  				
  					particles[ptsi]=new SFNode('Transform { children Shape { appearance Appearance {textureTransform TextureTransform { } }}}');
  					particles[ptsi].children[0].geometry = particleObjects[0].geometry;
  					particles[ptsi].children[0].appearance.material = particleObjects[0].appearance.material;
  					particles[ptsi].children[0].appearance.texture  = particleObjects[0].appearance.texture;
  					particles[ptsi].set_translation = pts[ptsi];
  					ptsi++;
  				
  				}
  	  		}
  		}
  		return pts;
  	}
  	
  	// compute equal spaced 3D grid coordinates, based on bbox
  	// also compute texture transform to map 0 -1 texture coordinate space 
  	function computeGridCoordUV(nu,nv,nw) 
  	{ var u,v,w;
  		var x,y,z;
  		var tu,tv;		  
  		var su,sv;		  
  		var bmin = bboxCenter.subtract(bboxSize.multiply(0.5));
  	  
  		//var pts = new MFVec3f();
  		var ptsi=0;
  	
  		pts.length = nw*nv*nu;
  		su= 1/(nu);
  		sv= 1/(nv);
  	  
  		for(w=0; w//particles[ptsi]=new SFNode('Transform {}');
  					//particles[ptsi].set_children = particleObjects;
  					p= new SFNode('Transform { children [ Shape { appearance Appearance {textureTransform TextureTransform { }  }}  PositionInterpolator {} ]}');				
  					pip = p.children[1];
  					
  					particles[ptsi]=p;
  
  					// re-use these nodes
  					p.children[0].geometry = particleObjects[0].geometry;
  					p.children[0].appearance.material = particleObjects[0].appearance.material;
  					p.children[0].appearance.texture  = particleObjects[0].appearance.texture;
  					p.children[0].appearance.textureTransform.translation = new SFVec2f(tu/su,tv/sv);
  				
  					p.children[0].appearance.textureTransform.scale = new SFVec2f(su,sv);
  					p.set_translation = pts[ptsi];
  
  					Browser.addRoute(master,'rotation',p,'set_rotation');
  					Browser.addRoute(master,'scaleOrientation',p,'scaleOrientation');
  					Browser.addRoute(master,'scale',p,'scale');
  
  					// position interpolation 
  					Browser.addRoute(masterTime,'fraction_changed',pip,'set_fraction');
  				
  					Browser.addRoute(pip,'value_changed',p,'set_translation');
  					var i=0;
  					pip.keyValue[i]=new SFVec3f(x,y,z); 	i++;
  					pip.keyValue[i]=new SFVec3f(x*2,y*2,z);	i++;
  					pip.keyValue[i]=new SFVec3f(x,y,z);		i++;
  					pip.keyValue[i]=new SFVec3f(x,y,z);		i++;
  					pip.keyValue[i]=new SFVec3f(x,-20,-y);	i++;
  					pip.keyValue[i]=new SFVec3f(x,-20,-y);	i++;
  
  					pip.keyValue[i]=new SFVec3f(x*3,y,z*3);	i++;
  					pip.keyValue[i]=new SFVec3f(x,y,z); 	i++;
  					pip.keyValue[i]=new SFVec3f(x,y,z); 	i++;
  
  					pip.keyValue[i]=new SFVec3f(1*Math.random()*bboxSize.x,1*Math.random()*bboxSize.y,1*Math.random()*bboxSize.z);	i++;
  					pip.keyValue[i]=new SFVec3f(-1*Math.random()*bboxSize.x,-1*Math.random()*bboxSize.y,-1*Math.random()*bboxSize.z);	i++;
  					pip.keyValue[i]=new SFVec3f(bmin.x+2*Math.random()*bboxSize.x,bmin.y+2*Math.random()*bboxSize.y,bmin.z+2*Math.random()*bboxSize.z);	i++;
  					pip.keyValue[i]=new SFVec3f(x,y,z); 	i++;
  					pip.keyValue[i]=new SFVec3f(x,y,z); 	i++;
  					ptsi++;
  				
  				}
  	  		}
  		}
  		return pts;
  	}  
  	
  	// computed coordIndex for 3D grid ILS
  	function computeGridLines(nu,nv,nw) 
  	{ var u,v,w;
  	  
  		var ind = new MFInt32();
  		var ptsi=0;
  		var indi=0;
  	
  		ind.length = nw*nv*(nu+1);
  	  
  		for(w=0; w// setup everything 
  	function initialize() {
  		var u,v,w;
  		u = uDimension;
  		v = vDimension;
  		w = wDimension;
  		var pts;
  		
  		//pts = computeGridCoord(u,v,w);
  		pts = computeGridCoordUV(u,v,w);
  
  		root.set_children = particles; // add all particles to root
  		//particles.length=0;
  		
  		//gridIls.coord.set_point = pts;
  		//gridIls.set_coordIndex = computeGridLines(u,v,w);
  	}		
  	function shutdown() 
  	{
  		particles.length=0;
  		pts.length=0;
  	}
  
  	function centerAnim(f) {
  		var n=particles.length;
  		var i;
  		for (i=0; iTimeSensor { startTime 0 loop TRUE cycleInterval 20 }
  
  DEF S_tx Script {
  	directOutput TRUE
  	field SFNode tx USE tx		# the
  	field SFNode master USE MasterTransform
  	field SFNode masterMaterial USE MasterMaterial
  
  	field SFNode gridder USE Gridder
  	
  	eventIn SFFloat anim
  	url "javascript:
  	function anim(f) {
  		
  		master.rotation[3] = Math.PI*Math.sin(2.0*f*Math.PI);
  		//f= 2+Math.sin(2.0*f*Math.PI);
  		//master.scale = new SFVec3f(f,f,f);
  		masterMaterial.transparency  = 0.1+0.25*0.5*(1+Math.sin(2.0*f*Math.PI));
  
  		//x= 1.0+Math.sin(2.0*f*Math.PI);
  		//master.scale = new SFVec3f(x,x,x);
  		//gridder.centerAnim =   (1 + 0.5*x) ;
  
  		//tx.translation.x = f;			
  		//tx.rotation = Math.PI*Math.sin(2.0*f*Math.PI);
  	}	
  	"
  
  
  }
  ROUTE TS.fraction_changed TO S_tx.anim
  
  
  # VRML absolute time 
  # startup timer 
  DEF initTS TimeSensor {
  	cycleInterval 0.1
  	loop TRUE
  }
  # start video
  ROUTE initTS.cycleTime TO M1.set_startTime
  
  # stop the startup timer
  ROUTE initTS.cycleTime TO initTS.set_stopTime