class Camera { float distance; float dEcranOeil; float dEcranRepere; Vecteur oeil,posRegard; Vecteur camX,camY,camZ,camX0,camY0,camZ0,vectEyeMouse,vectImpact ; //++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++ public Camera(){ vectImpact=new Vecteur(0,0,-rayon); camZ0=new Vecteur(0,0,1); camZ=camZ0.cloner(); camY0=new Vecteur(0,1,0); camY=camY0.cloner(); camX0=new Vecteur(1,0,0); camX=camX0.cloner(); distance=1000; this.posRegard =new Vecteur(0,0,0); oeil=posRegard.ajouter(camZ0,-distance); dEcranOeil=height/(2*tan(PI/6)); dEcranRepere=distance-dEcranOeil; } //++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++ 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); } //++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++ void tournerCam(Quat lequa){ camZ=lequa.tourner(camZ0); camY=lequa.tourner(camY0); camX=lequa.tourner(camX0); } //++++++++++++++++++++++++++++++++++++++++++++++++++ // //++++++++++++++++++++++++++++++++++++++++++++++++++ public void intersectionRayonSphere(){ float lambda; vectEyeMouse=camZ.mul(dEcranOeil).ajouter(camY,mouseY-height/2).ajouter(camX,-mouseX+width/2); float a=sq(vectEyeMouse.length()); float b=-dEcranOeil*cam.distance; float c=sq(distance)-rayon*rayon; float delta= b*b-a*c; if(delta>=0){ lambda=(-b-sqrt(delta))/a; vectImpact=cam.oeil.ajouter(vectEyeMouse,lambda); } else{ lambda=-b/a; vectImpact=oeil.ajouter(vectEyeMouse,lambda); } } }