class Camera { float distance; float distanceEcranOeil; float theta; float phi; Vecteur camX,camY,camZ,camX0,camY0,camZ0; Vecteur oeil,posRegard; Quat lequat; public Camera(){ distance=5000; lequat =new Quat(1,0,0,0); camZ0 =new Vecteur(0 ,0 ,-1 ); camZ =new Vecteur(0 ,0 ,-1 ); camY0 =new Vecteur(0 ,1 ,0 ); camY =new Vecteur(0 ,1 ,0 ); camX0 =new Vecteur(-1 ,0 ,0 ); camX =new Vecteur(-1 ,0 ,0 ); distanceEcranOeil=height/(2*(float)Math.tan(PI/6)); this.posRegard =new Vecteur(0,0,0); oeil=posRegard.ajouter(camZ0,-distance); theta=0f; phi=0f; } void placercamera(){ oeil=posRegard.ajouter(camZ,-distance); camera(oeil.x,oeil.y,oeil.z,posRegard.x,posRegard.y,posRegard.z,camY.x,camY.y,camY.z); directionalLight(190, 255, 255, 0.3,0.4,-0.2); ambientLight(155,150,180); } void replacerCam(){ theta+=(mouseX-pmouseX)/120.0f; phi+=(mouseY-pmouseY)/120.0f; lequat=new Quat(cos(theta/2),0,sin(theta/2),0); lequat=Quat.mul(new Quat(cos(phi/2),cos(theta)*sin(phi/2),0,-sin(theta)*sin(phi/2)),lequat); camZ=lequat.tourner(camZ0); camY=lequat.tourner(camY0); camX=lequat.tourner(camX0); } public Vecteur eyeMouse(){ Vecteur res=camZ.mul(distanceEcranOeil).ajouter(camY,mouseY-height/2). ajouter(camX,-mouseX+width/2); return res; } public Vecteur origineMouse(){ Vecteur res=camZ.mul(distanceEcranOeil).ajouter(camY,mouseY-height/2). ajouter(camX,-mouseX+width/2); return res.ajouter(cam.oeil,1); } public Vecteur Mousecentre(){ Vecteur res=camZ.mul(-distance+distanceEcranOeil).ajouter(camY,mouseY-height/2). ajouter(camX,-mouseX+width/2); return res; } }