Moteur physique : soft body (corps deformable, masse-ressort, avec l'integration d'euler :s)

Soyez le premier à donner votre avis sur cette source.

Vue 11 516 fois - Téléchargée 933 fois

Description

Pour commencer c'est coder en VC++ 7 en vu de passage au VC++ 7.1...
La screen affiche fps 9 c'est parce que j'ai une TNT 2 et en plus j'ai pas les bon driver ...

Bon voilà c'est un debut pour un moteur physique ici ca gère pas grand chose ... A part les soft body les corps deformables ... Et bien là c'est une simple implementation avec les springs-masses mais le problème c'est je gères ca avec l'integration de euler et vous connaissez le truc a coup d'approximation ca foire... Vous verrez dans la source vous avez 2 exemples 2 testes
-test 1 : 2 cubes subissant la graviter et un cube bloqué en l'air a cause d'un sommet static ...
-test 2 : un mesh charger un fichier ASE il y a 2 types de generation de ressort lisez les commentaires ...
^ il faut jouer avec les commentaires pour les 2 tests ^

Normalement les classes sont commenter a moins que j'ai oublié mais si ce n'est pas le cas demander ... mais en general les noms sont assez explicite ...

Voilà des corps deformables ...

Source / Exemple :


/* ------------------------------------------------------------------------

  • TEST 2 : chargement d'un objet ASE voir plus bas pour la methode utiliser pour la
  • generation des ressorts.
* *
  • ------------------------------------------------------------------------ */
ArrayVertex ArrV; // tableau de vertice ArrayPolygone ArrPl; // tableau de polygone ArrayParticule ArrP; // tableau de particule ArraySpring ArrS; // tableau de ressort SoftBody SB; // corps deformable BoundingBox bbx0; // boite englobante ASELoader obj("skone.ASE"); // le fichier ASE obj.Load(10, 5); // charger en divisant par 10 et en surelevant de 5 ArrV = obj.GetVertexArray(); // recuperer le tableau de vertice ArrPl = obj.GetPolygoneArray(); // recuperer le tableau de polygone ArrP.SetArray(ArrV, 200); // Affecter le tableau particule avec le tableau de vertice avec une masse totale de 200 // ---------------- //ArrS.GenerateSpring_bone(ArrV, ArrPl); // une arrete = un ressort ArrS.GenerateAllSpring(ArrV); // relier tous les vertex entre eux pour faire des ressorts // ---------------- SB.SetArrayParticule(ArrP); // affecter le tableau de particule au corps deformable SB.SetArrayPolygone(ArrPl); // affecter le tableau de polygone au corps deformable SB.SetArraySpring(ArrS); // affecter le tableau de resort au corps deformable ArrSB.BeginSoftBody(); // commencer laffectation du tableau de corps deformable ArrSB.CreateSoftBody(SB); // cree ArrSB.EndSoftBody(); // finir bbx0.Include(ArrV); // dimenssionner la boite englobante avec le tableau de vertice

Conclusion :


BUG :
TEST 1 : Avec le premier test quand un cubes tombe par terre et commence a ce stabilise il ce met a tourner tout seul.
TEST 2 : Des que le mesh touche le sol il vibre un peu tremblouille et le système s'effondre ...
CORRECTION A VENIR :
dire aurevoir a euler et bienvenu a Runge-Kutta RK4 ...

Ah oui j'oubliais c'est qu'une infime parti du projet il y a un moteur graphique et des outils aussi qui sont en train d'etre coder en tout on est 3 dans le projet ... Et comme c'est un assez gros projet on a toujours besoin de coder on sait jamais si vous êtes interessez pour nous donner un coup de main on est toujours preneur vous pouvez m'ecrire en PV ou sur mon eMail SKone007@hotmail.com ca fait aussi MSN si vous voulez ...

Merci et je comptes sur la communauter pour toute critique constructive sur l'agencement du moteur la manière de coder enfin tout ...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Menontona
Messages postés
9
Date d'inscription
samedi 7 juin 2003
Statut
Membre
Dernière intervention
17 mai 2006
-
Projet ambitieux et digne de ce nom, continué les gars. Si vous cherche des programmateurs contacté moi
skone007
Messages postés
166
Date d'inscription
mercredi 24 avril 2002
Statut
Membre
Dernière intervention
23 juin 2009
-
Mais comme là on joue avec des constantes tout ce fait a la compilation et d'ailleur je crois même que le compilateur fera ca de lui même. Peut allegé la compilation mais je sais pas fodrais que je demande a la personne qui a ecrit ce petit tuto je penses pas qu'elle est fait ca au hasard...
nightlord666
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
5 -
Normalement tu peut mettre :

#define zap(x) delete(x);x=NULL;

Ca evite de faire un test.
skone007
Messages postés
166
Date d'inscription
mercredi 24 avril 2002
Statut
Membre
Dernière intervention
23 juin 2009
-
Pour mettre en bloc et faire qu'une seul fois...
Pour être plus precis je sais pas c'est un code copier coller sur la protection des pointeurs...
nightlord666
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
5 -
Dans Include.h
--> #define zap(x) do { delete(x); x = NULL; } while (0)

Quel est l'interet du do...while(0) ?? J'ai beau chercher, mais je ne trouve pas...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.