Gestion rotation de la camera
Ajouté par Anonyme il y a plus de 12 ans
code de mania drive
A reutilisé
// camera + drawing tmp=raydium_ode_element_pos_get_name(cam); if(vue==3) { dReal mpos[3]; dReal *vel; dReal cam[3]; dReal dist_vector[3]; dReal car_to_cam_distance; // get drone position pos=raydium_ode_element_pos_get_name("corps"); // get drone vector vel=raydium_ode_element_linearvelocity_get_name("corps"); // get position of camera in world coords raydium_ode_element_RelPointPos_name("corps",-1,0,0,cam); // correct z pos (always at top of the car, for example) cam[2]=pos[2]+0.4; // on position du drone + son vecteur mpos[0]=pos[0]+vel[0]; mpos[1]=pos[1]+vel[1]; mpos[2]=pos[2]+vel[2]; // calculate the alternate camera position dist_vector[0] = cam_pos[0]-pos[0]; dist_vector[1] = cam_pos[1]-pos[1]; dist_vector[2] = cam_pos[2]-pos[2]; // find the distance from car to camera car_to_cam_distance = sqrt(dist_vector[0]*dist_vector[0] + dist_vector[1]*dist_vector[1] + dist_vector[2]*dist_vector[2]); // determine new camera position by scaling down the distance vector to be exactly 1 unit long, // and then using that vector as an offset from the car's position cam_pos[0] = pos[0] + (dist_vector[0]/car_to_cam_distance); cam_pos[1] = pos[1] + (dist_vector[1]/car_to_cam_distance); cam_pos[2] = pos[2] + (dist_vector[2]/car_to_cam_distance); if(camera_alternate) { cam[0] = cam_pos[0]; cam[1] = cam_pos[1]; cam[2] = cam_pos[2] + 0.4; // correct z pos (always at top of the car, for example) } // standard smooth lookat camera if(camera_lag) raydium_camera_smooth(cam[0],cam[1],cam[2],mpos[1],-mpos[2],mpos[0], 70,0,raydium_frame_time*camera_lag_speed); else raydium_camera_look_at(cam[0],cam[1],cam[2],pos[1],-pos[2],pos[0]); }