// UP key move up
// DOWN key move down
// LEFT key strafe left
// RIGHT key strafe left
//
float movefactor = 8.0;
PVector cameraPostion, cameraTarget, cameraDirection, purpDirection;
float c = cos(PI/2);
float s = sin(PI/2);
float [] m1 = {1,0,0.01, 0,1,0, -0.01,0,1} ;// pi/64 .... 3 degress anti clock wize rotation
float [] m2 = {1,0,-0.01, 0,1,0, 0.01,0,1} ;// pi/64 .... 3 degress clock wize rotation
float [] m3 = {0,0,1 ,0,1,0, -1,0,0} ;// pi/2 .... 90 degress anti clock wize rotation
void setup() {
size(800,600, P3D);
orientation(LANDSCAPE);
cameraPostion = new PVector(0, 0, 1000);
cameraTarget = new PVector(0.0, 0.0, 0.0);
cameraDirection = new PVector(0, 0, -1);
purpDirection = new PVector(0, 0, 0);
// Update Look At Position. otherwize text will start at 0,0,0 then jump to cam target on key press
cameraTarget = PVector.add(cameraPostion, cameraDirection);
}
void draw() {
background(0);
lights();
ambient(250, 250, 250);
camera(cameraPostion.x, cameraPostion.y, cameraPostion.z,
cameraTarget.x, cameraTarget.y, cameraTarget.z,
0.0, 1.0, 0.0);
fill(0,0,255);
box (70);
text(" HELLO World! ",cameraTarget.x,cameraTarget.y,cameraTarget.z-100);
}
void keyPressed()
{
if (key == CODED) {
// Move Up.
if (keyCode == UP) { cameraPostion.y -= movefactor; }
// Move Down.
if (keyCode == DOWN) { cameraPostion.y += movefactor; }
// Strife Left.
if (keyCode == LEFT)
{
purpDirection.x = (m3[0]*cameraDirection.x)+(m3[1]*cameraDirection.y)+(m3[2]*cameraDirection.z);
purpDirection.y = (m3[3]*cameraDirection.x)+(m3[4]*cameraDirection.y)+(m3[5]*cameraDirection.z);
purpDirection.z = (m3[6]*cameraDirection.x)+(m3[7]*cameraDirection.y)+(m3[8]*cameraDirection.z);
cameraPostion = PVector.add(cameraPostion,(PVector.mult(purpDirection,movefactor)));
}
// Strife Right.
if (keyCode == RIGHT)
{
purpDirection.x = (m3[0]*cameraDirection.x)+(m3[1]*cameraDirection.y)+(m3[2]*cameraDirection.z);
purpDirection.y = (m3[3]*cameraDirection.x)+(m3[4]*cameraDirection.y)+(m3[5]*cameraDirection.z);
purpDirection.z = (m3[6]*cameraDirection.x)+(m3[7]*cameraDirection.y)+(m3[8]*cameraDirection.z);
cameraPostion = PVector.sub(cameraPostion,(PVector.mult(purpDirection,movefactor)));
}
}
// Rotate Left.
if (key == 'q' || key == 'Q' )
{
cameraDirection.x = (m1[0]*cameraDirection.x)+(m1[1]*cameraDirection.y)+(m1[2]*cameraDirection.z);
cameraDirection.y = (m1[3]*cameraDirection.x)+(m1[4]*cameraDirection.y)+(m1[5]*cameraDirection.z);
cameraDirection.z = (m1[6]*cameraDirection.x)+(m1[7]*cameraDirection.y)+(m1[8]*cameraDirection.z);
}
// Rotate Right.
if (key == 'e' || key == 'E' )
{
cameraDirection.x = (m2[0]*cameraDirection.x)+(m2[1]*cameraDirection.y)+(m2[2]*cameraDirection.z);
cameraDirection.y = (m2[3]*cameraDirection.x)+(m2[4]*cameraDirection.y)+(m2[5]*cameraDirection.z);
cameraDirection.z = (m2[6]*cameraDirection.x)+(m2[7]*cameraDirection.y)+(m2[8]*cameraDirection.z);
}
// Move Forward.
if (key == 's' || key == 'S' ) { cameraPostion = PVector.sub(cameraPostion,(PVector.mult(cameraDirection,movefactor))); }
// Move Backward.
if (key == 'w' || key == 'W' ) { cameraPostion = PVector.add(cameraPostion,(PVector.mult(cameraDirection,movefactor))); }
// Update Look At Position.
cameraTarget = PVector.add(cameraPostion, cameraDirection);
}