The middle of the rect is static at the origin, where the camera is facing, and the rect shall also face the camera.
Lik if it's stuck on a stick infront of it.

ignore the text on the picture, it's the best i found
I want to know the coordinates of the corners so can not use camera.beginHUD() or popMatrix() to achieve this since this doesn't give me any coordinates.
Also screenX/Y and the picker library isn't doing what I wan't to do.
Tried to read up on how to do rotation in 3D but euler angles, rotation matrices,quaternions etc is not something I understand at the moment.
Here is my code, with with just Yaw+Roll it works, but with Pitch any other angle than 0 it doesn't.
Use R, Y, P keys to rotate and Enter to reset
import peasy.*;
PeasyCam camera;
float[] rot;
float disx;
float disy;
float yaw,pitch,roll;
void setup(){
size(600,400,P3D);
disx=width*0.6;
disy=height/10;
camera = new PeasyCam(this, 100);
camera.setCenterDragHandler(null);
strokeWeight(3);
}
float [] rec;
void draw(){
background(180);
disx=(float)camera.getDistance()*0.86;
disy=(float)camera.getDistance()*0.57;
rec = new float [] {-disx,-disy,0,disx,-disy,0,disx,disy,0,-disx,disy,0};
//rot = camera.getRotations();
//yaw=rot[0]; pitch=rot[1]; roll=rot[2];
if(keyPressed){
float rotspeed=0.03;
if(key=='p') { pitch += rotspeed; }
if(key=='y') { yaw += rotspeed; }
if(key=='r') { roll += rotspeed; }
if(key==ENTER) { yaw=pitch=roll=0; }
}
camera.setRotations(yaw,pitch,roll);
float sinyaw,cosyaw, sinpitch,cospitch, sinroll, cosroll;
sinyaw=sin(-yaw-HALF_PI);
cosyaw=cos(-yaw-HALF_PI);
sinpitch=sin(pitch-HALF_PI);
cospitch=cos(pitch-HALF_PI);
cosroll=cos(roll);
sinroll=sin(roll);
for(int i=0; i<12; i+=3){
float x,y,z,x0,y0,z0;
x0=x=rec[i]; y0=y=rec[i+1]; z=z0=rec[i+2];
x=x0*cosroll-y0*sinroll;
y=y0*cosroll+x0*sinroll;
z=x0*cospitch;
y*=sinpitch;
z=y*cosyaw;
y*=sinyaw;
rec[i]=x; rec[i+1]=y; rec[i+2]=z;
}
stroke(#ff0000);
line(0,0,0,100,0,0);
stroke(#00ff00);
line(0,0,0,0,100,0);
stroke(#0000ff);
line(0,0,0,0,0,100);
stroke(0);
line(rec[0],rec[1],rec[2], rec[3],rec[4],rec[5]);
line(rec[3],rec[4],rec[5], rec[6],rec[7],rec[8]);
line(rec[6],rec[7],rec[8], rec[9],rec[10],rec[11]);
line(rec[9],rec[10],rec[11], rec[0],rec[1],rec[2]);
}
A bit simpler example just a rotating square and static camera, only rotating in one axis at the time.
Also just found this https://khanacademy.org/computer-programming/3d-tutorial-4/1648921303
import peasy.*;
PeasyCam camera;
float S,C,R,D;
float [] rec;
void setup(){
size(600,400,P3D);
camera = new PeasyCam(this, 100);
camera.setCenterDragHandler(null);
strokeWeight(3);
D=30;
}
void draw(){
background(180);
rec = new float [] {-D,-D,0,D,-D,0,D,D,0,-D,D,0};
camera.setRotations(0,0,0);
R+=PI/60;
S=sin(R);
C=cos(R);
for(int i=0; i<12; i+=3){
float x,y,z,x0,y0,z0;
x0=x=rec[i]; y0=y=rec[i+1]; z=z0=rec[i+2];
if(frameCount%180<60){
x=x0*C-y0*S;
y=y0*C+x0*S;
}
else if(frameCount%180<120){
z=z0*C-x0*S;
x=x0*C+z0*S;
}
else{
y=y0*C-z0*S;
z=z0*C+y0*S;
}
rec[i]=x; rec[i+1]=y; rec[i+2]=z;
}
stroke(#ff0000);
line(0,0,0,100,0,0);
stroke(#00ff00);
line(0,0,0,0,100,0);
stroke(#0000ff);
line(0,0,0,0,0,100);
stroke(0);
line(rec[0],rec[1],rec[2], rec[3],rec[4],rec[5]);
line(rec[3],rec[4],rec[5], rec[6],rec[7],rec[8]);
line(rec[6],rec[7],rec[8], rec[9],rec[10],rec[11]);
line(rec[9],rec[10],rec[11], rec[0],rec[1],rec[2]);
}