Maybe this will help. It doesn't work with angles directly, because that will cause a lot more math to be involved. The set()-method needs a camera position and an initial lookAt position in world space (if you want to work with angles, derive the lookAt from the position and the angles). Then call follow() each frame. It may do, what you want.
import com.threed.jpct.*;
public class Follower {
private SimpleVector initial=null;
private SimpleVector angles=null;
private SimpleVector offsets=null;
private SimpleVector lookAt=null;
private boolean firstRun=true;
public Follower() {
initial=new SimpleVector();
}
public void set(SimpleVector start, SimpleVector lookAt) {
initial=start;
this.angles=angles;
this.lookAt=lookAt;
}
public void follow(Object3D obj, Camera cam) {
if (firstRun) {
SimpleVector c=obj.getTransformedCenter();
offsets=initial.calcSub(c);
lookAt=lookAt.calcSub(c);
firstRun=false;
}
SimpleVector center=obj.getTransformedCenter();
SimpleVector camPos=new SimpleVector(center);
SimpleVector zOffset=obj.getZAxis();
SimpleVector yOffset=obj.getYAxis();
SimpleVector xOffset=obj.getXAxis();
zOffset.scalarMul(offsets.z);
yOffset.scalarMul(offsets.y);
xOffset.scalarMul(offsets.x);
SimpleVector zlookOffset=obj.getZAxis();
SimpleVector ylookOffset=obj.getYAxis();
SimpleVector xlookOffset=obj.getXAxis();
SimpleVector look=new SimpleVector(center);
zlookOffset.scalarMul(lookAt.z);
ylookOffset.scalarMul(lookAt.y);
xlookOffset.scalarMul(lookAt.x);
look.add(zlookOffset);
look.add(xlookOffset);
look.add(ylookOffset);
camPos.add(zOffset);
camPos.add(yOffset);
camPos.add(xOffset);
cam.setPosition(camPos);
cam.lookAt(look);
}
}