Index: test8.c
===================================================================
--- test8.c	(revision 441)
+++ test8.c	(revision 442)
@@ -0,0 +1,275 @@
+/*
+    Raydium - CQFD Corp.
+    http://raydium.org/
+    License: GPL - GNU General Public License, see "gpl.txt" file.
+*/
+
+// Small demo of Raydium embedded PHP scripting, building a train
+// using train.php script.
+
+char *version="version 0.1";
+
+#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 light_color[] = {1.0, 0.9, 0.8, 1.0};
+
+int sound_car;
+
+
+void simul_create()
+{
+
+int a;
+char c[4];
+int i;
+
+#define BREAK_FORCE     200
+
+#define ERP_CFM		0.8,0.1 //#define ERP_CFM         0.1,1.0
+#define ROTFRICTION	0.001 //#define ROTFRICTION     0.05
+
+
+    
+        raydium_ode_object_delete_name("TANK");
+
+  a=raydium_ode_object_create("TANK");
+    raydium_ode_object_box_add("tank_corps",a,10,RAYDIUM_ODE_AUTODETECT,0,0,RAYDIUM_ODE_STANDARD,0,"t80b.tri");
+    //raydium_ode_element_move_name_3f("tank_corps",-2,0,0+0.5);
+
+    raydium_ode_motor_create("tank_moteurG",a,RAYDIUM_ODE_MOTOR_ENGINE);
+    raydium_ode_motor_power_max_name("tank_moteurG",1);
+    
+    raydium_ode_motor_create("tank_moteurD",a,RAYDIUM_ODE_MOTOR_ENGINE);
+    raydium_ode_motor_power_max_name("tank_moteurD",1);
+
+    c[0]='H';
+    c[1]='G';
+    c[3]=0;
+    for (i=0;i<6;i++) {
+        c[2]='0'+i;
+        raydium_ode_object_sphere_add(&c[1],a,1,0.140,RAYDIUM_ODE_STANDARD,0,"");
+        raydium_ode_element_rotfriction_name(&c[1],ROTFRICTION);
+        raydium_ode_element_move_name_3f(&c[1],0.930-((1.030+0.760)/6.0)*i,0.425,-0.240);
+        raydium_ode_joint_attach_hinge_name(c,"tank_corps",&c[1],0.930-((1.030+0.760)/6.0)*i,0.425,-0.240,RAYDIUM_ODE_JOINT_AXE_Y);
+        raydium_ode_motor_attach_name("tank_moteurG",c,0);
+        raydium_ode_element_slip_name (&c[1],RAYDIUM_ODE_SLIP_NORMAL);        
+    }
+    
+    c[0]='H';
+    c[1]='D';
+    c[3]=0;
+    for (i=0;i<6;i++) {
+        c[2]='0'+i;
+        raydium_ode_object_sphere_add(&c[1],a,1,0.140,RAYDIUM_ODE_STANDARD,0,"");
+        raydium_ode_element_rotfriction_name(&c[1],ROTFRICTION);
+        raydium_ode_element_move_name_3f(&c[1],0.930-((1.030+0.760)/6.0)*i,-0.425,-0.240);
+        raydium_ode_joint_attach_hinge_name(c,"tank_corps",&c[1],0.930-((1.030+0.760)/6.0)*i,-0.425,-0.240,RAYDIUM_ODE_JOINT_AXE_Y);
+        raydium_ode_motor_attach_name("tank_moteurD",c,0);       
+        raydium_ode_element_slip_name (&c[1],RAYDIUM_ODE_SLIP_NORMAL);         
+    }
+    
+    raydium_ode_object_box_add("tank_tour",a,1,RAYDIUM_ODE_AUTODETECT,0,0,RAYDIUM_ODE_STANDARD,0,"t80t.tri");
+    raydium_ode_element_move_name_3f("tank_tour",0,0,0.4);
+
+    raydium_ode_joint_attach_hinge_name("pivot","tank_corps","tank_tour",0,0,0.4,RAYDIUM_ODE_JOINT_AXE_Z);
+    raydium_ode_joint_hinge_limits_name("pivot",-2.5,2.5);
+    raydium_ode_motor_create("pivot_motor",a,RAYDIUM_ODE_MOTOR_ANGULAR);
+    raydium_ode_motor_attach_name("pivot_motor","pivot",0);
+    raydium_ode_motor_power_max_name("pivot_motor",1);
+
+    raydium_ode_object_box_add("tank_canon",a,1,RAYDIUM_ODE_AUTODETECT,0,0,RAYDIUM_ODE_STANDARD,0,"t80c.tri");
+    raydium_ode_element_move_name_3f("tank_canon",1,0,0.30);
+
+    raydium_ode_joint_attach_hinge_name("trukatach","tank_tour","tank_canon",0.2,0,0.3,RAYDIUM_ODE_JOINT_AXE_Y);
+    raydium_ode_joint_hinge_limits_name("trukatach",0,0.5);
+    raydium_ode_motor_create("truk_motor",a,RAYDIUM_ODE_MOTOR_ANGULAR);
+    raydium_ode_motor_attach_name("truk_motor","trukatach",0);
+    raydium_ode_motor_power_max_name("truk_motor",1);
+    
+    raydium_ode_object_move_name_3f("TANK",1,0,0.2);
+}
+
+
+
+
+void display(void)
+{
+float speed;
+static float speedD=0,speedG=0;
+int delta_x, delta_y;
+
+unsigned char dir;
+static int inboard=1;
+
+    raydium_joy_key_emul();
+        
+    speedD=speedG=0;
+    dir=0;
+    if(raydium_key[GLUT_KEY_UP]) dir|=1;
+    if(raydium_key[GLUT_KEY_RIGHT]) dir|=2;
+    if(raydium_key[GLUT_KEY_DOWN]) dir|=4;
+    if(raydium_key[GLUT_KEY_LEFT]) dir|=8;
+    
+    switch (dir) {
+        case 1: speedG=1;speedD=1;break;
+        case 2: speedG=1;speedD=-1;break;
+        case 3: speedG=1;speedD=0;break;
+        case 4: speedG=-1;speedD=-1;break;
+        case 6: speedG=-1;speedD=0;break;
+        case 8: speedG=-1;speedD=1;break;
+        case 9: speedG=0;speedD=1;break;
+        case 12: speedG=0;speedD=-1;break;
+        default: speedD=speedG=0;
+    }
+    speedD*=10;
+    speedG*=10;
+    raydium_ode_motor_speed_name("tank_moteurG",-speedG);
+    raydium_ode_motor_speed_name("tank_moteurD",-speedD);
+    
+
+    speed=raydium_trigo_abs(speedD)+raydium_trigo_abs(speedG);
+    speed*=0.025;
+    speed+=0.5;
+    speed+=(raydium_random_neg_pos_1()/15);
+    raydium_ode_element_sound_update_name("tank_corps",sound_car);
+    raydium_sound_SetSourcePitch(sound_car,raydium_trigo_abs(speed));
+
+    if(raydium_key_last==1027)
+        exit(0);
+
+    raydium_light_position[0][0]=100;
+    raydium_light_position[0][1]=100;
+    raydium_light_position[0][2]=100;
+    raydium_light_position[0][3]=1.0;
+    raydium_light_update_position(0);
+
+    raydium_background_color_change(light_color[0],light_color[1],light_color[2],light_color[3]);
+
+    raydium_clear_frame();
+
+    if(!raydium_key[GLUT_KEY_F2]){
+        
+        raydium_viewport_enable("camera2");
+        
+        raydium_ode_element_camera_inboard_name("tank_tour",0.2,0,0.1,2,0,0);
+
+        raydium_sky_box_render(raydium_camera_x,raydium_camera_y,raydium_camera_z);
+        raydium_camera_replace();
+        raydium_ode_draw_all(RAYDIUM_ODE_DRAW_NORMAL);
+        raydium_viewport_save();
+    }
+    raydium_clear_frame();
+
+
+    delta_x = raydium_mouse_x - (raydium_window_tx/2);
+    delta_y = raydium_mouse_y - (raydium_window_ty/2);    
+    raydium_mouse_move(raydium_window_tx/2, raydium_window_ty/2);    
+    
+    if (inboard){
+        static GLfloat speed=0;
+        
+        if (raydium_mouse_button[2]) {
+            if (speed==0)
+                speed=0.1;
+            speed+=0.01;
+        }
+            else
+        speed=0;
+        
+        if (raydium_mouse_click==4)
+            speed=0.05;
+        if (raydium_mouse_click==5)
+            speed=-0.05;
+            
+
+        cam_angle_x += (delta_x*3*0.1f); 
+        cam_angle_y += (delta_y*3*0.1f); 
+        
+        cam_pos_z += (raydium_trigo_sin(cam_angle_x+90)*speed*raydium_trigo_sin(90-cam_angle_y));
+        cam_pos_x += (raydium_trigo_cos(cam_angle_x+90)*speed*raydium_trigo_sin(90-cam_angle_y));
+        cam_pos_y += (raydium_trigo_cos(90-cam_angle_y)*speed);
+        raydium_camera_place(cam_pos_x,cam_pos_y,cam_pos_z,cam_angle_x,cam_angle_y,0);
+        
+    }
+    else {
+        raydium_ode_motor_angle_name("pivot_motor",raydium_ode_motor_angle_get_name("pivot_motor",0)+delta_x*0.1f);
+        
+        raydium_ode_motor_angle_name("truk_motor",raydium_ode_motor_angle_get_name("truk_motor",0)-delta_y*0.01f);
+        
+        raydium_ode_element_camera_inboard_name("tank_corps",0.7,0,0.2,2,0,0);
+    }
+
+    raydium_sky_box_render(raydium_camera_x,raydium_camera_y,raydium_camera_z);
+    raydium_camera_replace();
+
+    raydium_ode_draw_all(0);
+    raydium_ode_draw_all(RAYDIUM_ODE_DRAW_RAY);
+    raydium_camera_replace();
+    
+    if(raydium_key[GLUT_KEY_F1])
+        raydium_ode_draw_all(1);
+    raydium_camera_replace();
+    
+
+    if(!raydium_key[GLUT_KEY_F2])
+        raydium_viewport_draw("camera2",20,70,60,30);
+
+    raydium_osd_printf(2,98,16,0.5,"font2.tga","- %3i FPS - Viewport demo %s for Raydium %s, CQFD Corp.",raydium_render_fps,version,raydium_version());
+
+//    raydium_osd_printf(2,80,16,0.5,"font2.tga","Camera: x:%f y:%f z:%f",cam_pos_x,cam_pos_y,cam_pos_z);
+
+    if (raydium_key_last==1000+'m') inboard^=1;
+
+    raydium_osd_logo("logo.tga");
+
+    raydium_rendering_finish();
+}
+
+
+int main(int argc, char **argv)
+{
+    raydium_init_args(argc,argv);
+
+    raydium_window_create(640,480,RAYDIUM_RENDERING_WINDOW,"test Viewports");
+    raydium_texture_filter=RAYDIUM_TEXTURE_FILTER_TRILINEAR;
+    raydium_projection_near=0.01;
+    raydium_projection_far=2500;
+    raydium_projection_fov=60;
+    raydium_fog_disable();
+    raydium_window_view_update();
+    raydium_shadow_enable();
+//    raydium_shadow_disable();
+
+    raydium_light_on(0);
+    memcpy(raydium_light_color[0],light_color,raydium_internal_size_vector_float_4);
+    raydium_light_intensity[0] = 1000000;
+    raydium_light_update_all(0);
+
+
+    raydium_ode_ground_set_name("cocorobix.tri");
+
+    raydium_sound_DefaultReferenceDistance=4.f;
+    sound_car=raydium_sound_LoadWav("murcielago.wav");
+    raydium_sound_SetSourcePitch(sound_car,0);
+    raydium_sound_SetSourceGain(sound_car,0.1);  // Engine Gain
+
+
+    raydium_viewport_create ("camera2",256,256);
+
+
+    simul_create();
+
+
+    raydium_callback(&display);
+    return(0);
+}
+// EOF