class SineSphere extends SCPattern {
private SawLFO yrot = new SawLFO(0, TWO_PI, 3000);
private SawLFO yrot2 = new SawLFO(0, -TWO_PI, 8000);
+
public final Projection sinespin;
public final Projection sinespin2;
- private BasicParameter rotation = new BasicParameter("rotation", 0);
+
+ //to-do: how to sync all hues across sphery's via one basicparameter
+ //public BasicParameter huespread = new BasicParameter("HueSpread", 180, 360);
+ public BasicParameter rotationx = new BasicParameter("rotx", 0, 0, 1 );
+ public BasicParameter rotationy = new BasicParameter("roty", 1, 0, 1);
+ public BasicParameter rotationz = new BasicParameter("rotz", 0, 0, 1);
+
float modelrad = sqrt((model.xMax)*(model.xMax) + (model.yMax)*(model.yMax) + (model.zMax)*(model.zMax));
Pick Sshape;
public final PVector P = new PVector();
this.vperiod = vperiod;
//addParameter(bounceamp = new BasicParameter("Amp", .5));
//addParameter(bouncerate = new BasicParameter("Rate", .5)); //ybounce.modulateDurationBy(bouncerate);
- addParameter(vibrationrate = new BasicParameter("vibration", 1000, 10000));
- addParameter(widthparameter = new BasicParameter("Width", .1));
- addParameter(huespread = new BasicParameter("Hue", 180, 360));
+ //addParameter(vibrationrate = new BasicParameter("vibration", 1000, 10000));
+ addParameter(widthparameter = new BasicParameter("Width", .2));
+ addParameter(huespread = new BasicParameter("Hue", 0, 180));
addModulator( vx = new SinLFO(500, 10000, 100000)).trigger() ;
//addModulator(xbounce = new SinLFO(model.xMax/3, 2*model.yMax/3, 2000)).trigger();
addModulator(ybounce= new SinLFO(model.yMax/3, 2*model.yMax/3, 240000./lx.tempo.bpm())).trigger(); //bounce.modulateDurationBy
//addModulator(bounceamp); //ybounce.setMagnitude(bouncerate);
- addModulator( vibration = new SinLFO(vibration_min , vibration_max, 240000./lx.tempo.bpm() ) ).trigger(); vibration.modulateDurationBy(vx);
+ addModulator( vibration = new SinLFO(vibration_min , vibration_max, 240000)).trigger(); //vibration.setPeriod(240000/lx.tempo.bpm());
}
}
+void setVibrationPeriod(double period){
+// to-do: make this conditional upon time signature
+vibration.setPeriod(period);
+
+}
float distfromcirclecenter(float px, float py, float pz, float f1x, float f1y, float f1z)
float qtheta = atan2( (q.x-f1xcenter) , (q.z - f1zcenter) );
- return map(qtheta, -PI/2, PI/2, 0, huespread.getValuef());
+ return map(qtheta, -PI/2, PI/2, 160-huespread.getValuef(), 240 +huespread.getValuef());
//if (q.x > f1xcenter ) {return 140 ;}
//else {return 250;}
}
super(glucose);
sinespin = new Projection(model);
sinespin2 = new Projection(model);
+ addParameter(rotationx);
+ addParameter(rotationy);
+ addParameter(rotationz);
addModulator(yrot).trigger();
addModulator(yrot2).trigger();
- addParameter(rotation);
+
+ //addParameter(huespread);
//Sshape = addPick("Shape", , 1);
spherys = new Sphery[] {
new Sphery(model.xMax/4, model.yMax/2, model.zMax/2, modelrad/16, modelrad/8, 3000),
// }
public void run( double deltaMs) {
- float t = lx.tempo.rampf();
- float bpm = lx.tempo.bpmf();
+ double t = lx.tempo.ramp();
+ double bpm = lx.tempo.bpm();
spherys[0].run(deltaMs);
spherys[1].run(deltaMs);
spherys[2].run(deltaMs);
spherys[3].run(deltaMs);
-
+ for ( Sphery s: spherys){
+ s.setVibrationPeriod(240000/bpm);
+ s.vibration.setBasis(t);
+ }
sinespin.reset(model)
.translateCenter(model, 0, 0, 0)
// .scale(1.3,1.3,1.3)
// Rotate around the origin (now the center of the car) about an y-vector
- .rotate(yrot.getValuef(), 0, 1 , 0)
+ .rotate(yrot.getValuef(), rotationx.getValuef(), rotationy.getValuef() , rotationz.getValuef())
.translate(model.cx, model.cy, model.cz);