We are about to switch to a new forum software. Until then we have removed the registration on this forum.
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]);
}
Answers
Seems that cube example on khanacademy was made in p5 maybe?
Just changed the syntax a little bit and it's running in processing.
Note I don't need a whole cube, just one side but anyways... Is it possible to tweak the cube to always face the camera?
EDIT: finally got it working
KhanAcademy uses a spinoff of ProcessingJS (Pjs) w/ JS syntax in place of Java's. ~O)
Refactored the 3D Rotating Cube Tutorial code, removing PeasyCam and using more Java syntax. ~O)
Also hosted the code online at this link: https://OpenProcessing.org/sketch/421281
Original code is at: https://KhanAcademy.org/computer-programming/3d-tutorial-4/1648921303
Made a p5.js version as well. But w/ a twist: 1D arrays. The 2D-arrays were flattened as 1D. :ar!
And visit this link below in order to see it online in action: :bz http://Bl.ocks.org/GoSubRoutine/a117ecb16a8b0f939a190f87d3a13267