Here is an example of a tween that follows a complex 3d path.
Library:
http://www.ekeneijeoma.com/processing/tween Code:/**
Title: complex 3d tween
Author: Bloom
Date: january 2010
Description: An object follows a complex path
*/
import processing.opengl.*;
import ijeoma.tween.*;
import ijeoma.easing.*;
//∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞
Thing obj;
//path coords
int i = 50;
float[][] path = {{i, i, i},{i*1.5, 0, 0},{i, -i, -i},{0, -i*1.5, 0},{-i, -i, i},{-i*1.5, 0, 0},{-i, i, -i},{0, i*1.5, 0}};
TweenSequence tweenSequence;
//∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞
void setup(){
size(400, 400, OPENGL);
obj = new Thing();
TweenGroup[] tweenGroup = new TweenGroup[path.length];
//fill groups for a full sequence
for(int i = 0; i < path.length; i++){
int next = ((i+1) == path.length)?0:i+1;
Tween tx = new Tween(this, "tweenX", obj, "object", path[i][0], path[next][0], 50f, Tween.FRAMES, 0f, Tween.LINEAR_EASE_OUT);
Tween ty = new Tween(this, "tweenY", obj, "object", path[i][1], path[next][1], 50f, Tween.FRAMES, 0f, Tween.LINEAR_EASE_OUT);
Tween tz = new Tween(this, "tweenZ", obj, "object", path[i][2], path[next][2], 50f, Tween.FRAMES, 0f, Tween.LINEAR_EASE_OUT);
tweenGroup[i] = new TweenGroup(this, "tweenGroupXYZ_" + i, new Object[]{tx, ty, tz});
}
tweenSequence = new TweenSequence(this, "tweenSequence", tweenGroup);
tweenSequence.repeat(Tween.NO_REVERSE); //repeat the sequence
tweenSequence.start();
}
void draw() {
background(255);
translate(width/2, height/2, 0);
rotateY(frameCount/100.0);
rotateX(2.0);
rotateZ(frameCount/200.0);
//simple guide..
noFill();
stroke(200);
box(i*2);
//path
noFill();
stroke(100);
beginShape();
for(int i = 0; i < path.length; i++){
vertex(path[i][0], path[i][1], path[i][2]);
}
endShape(CLOSE);
//tween object
Tween tx = tweenSequence.getCurrentTweenGroup().getTweenByName("tweenX");
Tween ty = tweenSequence.getCurrentTweenGroup().getTweenByName("tweenY");
Tween tz = tweenSequence.getCurrentTweenGroup().getTweenByName("tweenZ");
obj.draw(tx.getPosition(), ty.getPosition(), tz.getPosition());
}
//∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞
class Thing{
Thing(){}
void draw(float _x, float _y, float _z){
fill(0);
translate(_x, _y, _z);
box(20);
}
}
for the simple example:
http://processing.org/discourse/yabb2/num_1263016190.html