Tutoriel ODE n°06 : Effet matrix de rallentissement :) « le: 27 Octobre 2005 à 17:34:02 » Essayez ce code Smiley Appuyez pas tres longtemp sur le bouton gauche et quand les cubes rebondissent sur le sol, laissez appuyé le bouton droite, effet garanti Smiley Note : non ce n'est pas une bite en cube ... Code: ; ------------------------------------------------------ ; Chargement des fichiers necessaires ; ------------------------------------------------------ Include "Inc_BlitzODE.bb" Include "Inc_Camera.bb" Include "Inc_LiGht.bb" ; ----------------------------- ; Ouverture de l'ecran ; ----------------------------- Graphics3D 800, 600,32,2 SetBuffer BackBuffer() ; ---------------------------------------------- ; Initialisation camera et lumières ; ---------------------------------------------- Proc_CreateCamera() Proc_CreateLiGht() ; ---------------------- ; Creation du sol ; ---------------------- Plane = CreatePlane() EntityColor Plane, 100,100, 100 ; ------------------------------ ; Initialisation de ODE ; ------------------------------ Global ODE_Plane = True Global ODE_World = ODE_dWorldCreate(ODE_Plane ) ; -------------------------------------------------------------------- ; Definition de la gravite X,Y et Z du monde ODE ; -------------------------------------------------------------------- ODE_dWorldSetGravity(0, -3.9, 0) ; -9.81 = gravité terrestre, mais je trouve cela un peu fort ODE_dSetContactMode(dContactBounce + dContactSoftERP + dContactSoftCFM) ODE_dSetBOUNCE(0.6) ; Taux de rebondissement globale ODE_dSetSOFT_ERP(1.0) ; Essayez 6.5 pour avoir un sol super rebondissant ODE_dSetSOFT_CFM(0.1) ; Essayez 3.2 pour rendre le sol moue (pour des effets d'eau par exemple) ; ----------------------------------------- ; Creation de plusieurs cubes ; ----------------------------------------- Taille#=1.90 Position#=3 Poid#=5 Proc_CreateODECube(0,Position#,Position#,0,0,0,Taille#,Taille#,Taille#,Poid#,Rnd(255),Rnd(255),Rnd(255)) Proc_CreateODECube(-Position#,Position#,-Position#,0,0,0,Taille#,Taille#,Taille#,Poid#,Rnd(255),Rnd(255),Rnd(255)) Proc_CreateODECube(Position#,Position#,-Position#,0,0,0,Taille#,Taille#,Taille#,Poid#,Rnd(255),Rnd(255),Rnd(255)) Proc_CreateODECube(0,7,0,0,0,0,Taille#,Taille#,Taille#,Poid#,Rnd(255),Rnd(255),Rnd(255)) Proc_CreateODECube(0,11,0,0,0,0,Taille#,Taille#,Taille#,Poid#,Rnd(255),Rnd(255),Rnd(255)) Proc_CreateODECube(0,15,0,0,0,0,Taille#,Taille#,Taille#,Poid#,Rnd(255),Rnd(255),Rnd(255)) Proc_CreateODECube(0,19,0,0,0,0,Taille#,Taille#,Taille#,Poid#,Rnd(255),Rnd(255),Rnd(255)) ; ------------------------- ; Boucle principale ; ------------------------- While Not KeyHit(1) ; ------------------------------------------------- ; Rafraichissement du monde ODE ; ------------------------------------------------- If MouseDown(2) Then ODE_dWorldQuickStep 0.005 ; Matrix effect :) Else ODE_dWorldQuickStep 0.06 EndIf ODE_UpdateGeoms() ; -------------------------------------------------------------------------------------------------------------------------------------------------- ; Cliquez lentement sur la souris pour appliquer une force aleatoire vers le haut ! devinez pour X et Z .... ; -------------------------------------------------------------------------------------------------------------------------------------------------- If MouseDown(1) Then Proc_AddForce(0,10,0) EndIf UpdateWorld RenderWorld ; ------------------------ ; Camera freelook ; ------------------------ Proc_Freelook(Camera_Ent,1.2,0.05) Flip Wend ODE_dCloseODE() End ; -------------------------------------------- ; Permet de créer un cube ODE ; -------------------------------------------- Function Proc_CreateODECube(Px#,Py#,Pz#,Rx#,Ry#,Rz#,Sx#,Sy#,Sz#,Mass#,Red,Green,Blue) G.TODEGeom = New TODEGeom GBody = ODE_dBodyCreate() ; ---------------------------------------------------------------------------------------------------------- ; Pour une raison obsur vous devez multiplier par x 2 la taille de votre ; RIGID BODY pour etre callé correctement avec les unités de mesure blitz ; ---------------------------------------------------------------------------------------------------------- GGeom = ODE_dCreateBox(ODE_World,Sx#*2,Sy#*2,Sz#*2,Mass#) ODE_dGeomSetBody GGeom, Gbody ODE_dBodySetPosition(Gbody, Px#,Py#,Pz#) ODE_dBodySetRotation(Gbody, Rx#,Ry#,Rz#) GMesh = CreateCube() EntityColor Gmesh, Red,Green,Blue EntityShininess Gmesh, 0.7 ScaleEntity GMesh , Sx#,Sy#,Sz# GShadow = CreateCube() EntityColor GShadow , 0,0,0 EntityAlpha GShadow , 0.3 ScaleEntity GShadow , Sx#,0.01,Sz# ODE_UpdateGeoms() End Function ; -------------------------------------------------------------------------- ; Applique une force sur tout les objets RIGID BODY ; -------------------------------------------------------------------------- Function Proc_AddForce(Fx#,Fy#,Fz#) For g.TODEGeom = Each TODEGeom ODE_dBodyAddForce(Gbody, Fx#,Fy#,Fz#) Next End Function Journalisée "Je crois au moment. S'il n'y a pas le moment, à ce moment-là, il faut arriver à ce moment-là, au moment qu'on veut." JC Vandamme "En 1 semaine, t'as réussit à pourrir quasiment tous les topics et en déterrer des tellement vieux, que même un nécrophile y mettrait pas sa bite." Wako bobysait Administrator Floodeur ***** Karma: 43 Messages: 4034 M.Kobayashi? WWW Re : Tutorial ODE n°06 : Effet matrix de rallentissement :) « Répondre #1 le: 28 Octobre 2005 à 01:37:04 » extra l'effet mtrix ... bête comme choux, mais vraiment sympatoche Smiley ps : si si ! c'est bien une bite :grin: Journalisée mangatome Invité Re : Tutorial ODE n°06 : Effet matrix de rallentissement :) « Répondre #2 le: 29 Octobre 2005 à 14:23:15 » oh trop fort Smiley ya moyen de faire un gros bullet time Smiley bien vu filax Journalisée Canigou Invité Re : Tutoriel ODE n°06 : Effet matrix de rallentissement :) « Répondre #3 le: 25 Mai 2006 à 21:01:38 » Superbes tutos ! Bonne initiation, merci Filax !