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