Raydium - CQFD Corp. http://raydium.org/ License: GPL - GNU General Public License, see "gpl.txt" file. */ // This file is a default skeleton. Replace all [ ... ] sections with yours. // Have fun ! #include "raydium/index.c" GLfloat cam_angle_x = 0; GLfloat cam_angle_y = 90; GLfloat cam_pos_x = 0; GLfloat cam_pos_y = 0; GLfloat cam_pos_z = 0; GLfloat speed = 0.1; GLint sensibilite = 3; GLfloat potencia=0; GLfloat direccion[3]; int free_cam=1; int flight=0; int a=0; void create_plane(void) { direccion[0]=0; direccion[1]=0; direccion[2]=0; raydium_ode_object_delete_name("CESNA"); a=raydium_ode_object_create("CESNA"); raydium_ode_object_box_add("avion",a,1,RAYDIUM_ODE_AUTODETECT,RAYDIUM_ODE_AUTODETECT,RAYDIUM_ODE_AUTODETECT,RAYDIUM_ODE_STANDARD,0,"plane.tri"); free_cam=0; flight=0; } void create_engine(void) { //elevation force raydium_ode_motor_delete_name("elev"); raydium_ode_motor_create("elev",a,RAYDIUM_ODE_MOTOR_ROCKET); raydium_ode_motor_rocket_set_name ("elev","avion", 0, 0, 0); raydium_ode_motor_speed_name ("elev", 1); raydium_ode_motor_rocket_orientation_name ("elev",0,0,0); //forwarding force = turbine/helix force raydium_ode_motor_delete_name("ff"); raydium_ode_motor_create("ff",a,RAYDIUM_ODE_MOTOR_ROCKET); raydium_ode_motor_rocket_set_name ("ff","avion", 0, 0, 0); raydium_ode_motor_speed_name ("ff", potencia/2); raydium_ode_motor_rocket_orientation_name ("ff",0,90,0); raydium_log("Engine created"); flight=1; } void display(void) { int delta_x, delta_y; raydium_joy_key_emul(); if(free_cam) { cam_pos_z += (raydium_trigo_sin(cam_angle_x+90)*raydium_joy_y*speed*raydium_trigo_sin(90-cam_angle_y)); cam_pos_x += (raydium_trigo_cos(cam_angle_x+90)*raydium_joy_y*speed*raydium_trigo_sin(90-cam_angle_y)); cam_pos_y += (raydium_trigo_cos(90-cam_angle_y)*speed*raydium_joy_y); cam_pos_x -= (raydium_trigo_cos(cam_angle_x)*raydium_joy_x*speed); cam_pos_z -= (raydium_trigo_sin(cam_angle_x)*raydium_joy_x*speed); raydium_joy_key_emul(); delta_x = raydium_mouse_x - (raydium_window_tx/2); cam_angle_x += (delta_x*sensibilite*0.1f); delta_y = raydium_mouse_y - (raydium_window_ty/2); cam_angle_y += (delta_y*sensibilite*0.1f); } raydium_mouse_move(raydium_window_tx/2, raydium_window_ty/2); if(flight) { //raydium_ode_motor_speed_name ("elev",1+(potencia/3) ); if(raydium_ode_element_touched_get_name("avion")) potencia=potencia/2.0; if(raydium_key_last==1000+'+') { potencia+=0.1; raydium_log("potencia: %f",potencia); } if(raydium_key_last==1000+'-') { potencia-=0.1; raydium_log("potencia: %f",potencia); } if(raydium_key[GLUT_KEY_LEFT])direccion[0]+=0.01; if(raydium_key[GLUT_KEY_RIGHT])direccion[0]-=0.01; if(raydium_key[GLUT_KEY_UP])direccion[1]-=0.01; if(raydium_key[GLUT_KEY_DOWN])direccion[1]+=0.01; //datos extra raydium_ode_element_rotate_name_3f("avion",direccion[0],direccion[1],direccion[2]); raydium_ode_motor_rocket_orientation_name ("ff",direccion[0],direccion[1]+90,direccion[2]); raydium_ode_motor_speed_name ("ff", potencia); raydium_ode_motor_speed_name("elev",potencia/2); } if(raydium_key_last==1027) exit(0); //"a" to create the plane if(raydium_key_last==1000+'a') create_plane(); //"s" to create engine if(raydium_key_last==1000+'s') create_engine(); raydium_clear_frame(); /* [ place your camera here ] */ if(free_cam) { raydium_camera_place(cam_pos_x,cam_pos_y,cam_pos_z,cam_angle_x,cam_angle_y,0); raydium_camera_replace(); } else { //plane relative camera raydium_ode_element_camera_inboard_name("avion",-3.3,0,2,6,0,0); } /* [ draw here ] */ raydium_ode_draw_all(0); raydium_rendering_finish(); } int main(int argc, char **argv) { raydium_init_args(argc,argv); raydium_window_create(800,600,RAYDIUM_RENDERING_WINDOW,"Situacion 1"); raydium_texture_filter_change(RAYDIUM_TEXTURE_FILTER_TRILINEAR); raydium_window_view_perspective(60,0.01,2500); // fov 60 + near and far planes raydium_fog_disable(); //raydium_hdr_enable(); raydium_light_enable(); raydium_light_on(0); raydium_light_conf_7f(0,50,150,200,1000000,1,0.9,0.7); // id, pos, intensity and color (RGB) raydium_background_color_change(1,0.9,0.7,1); raydium_sky_box_cache(); /* [ place base scene here ] */ raydium_ode_ground_set_name("desertBIG.tri"); raydium_callback(&display); return(0); } // EOF