Créer un système de physique ? - Infographie 3D - Graphisme
Marsh Posté le 12-05-2005 à 16:55:03
ReplyMarsh Posté le 12-05-2005 à 21:09:14
NullDragon a écrit : Par un exemple: Admettons que je veuille créer un arbre en 3D, quelle genre d'algorithme, s'il en existe pour cela, ou de concept, me permettrait de faire en sorte que lors d'une détection de collision sur un point précis selon une force déterminé ferait bouger le reste de l'arbre en fonction de ce point de touché ? |
C'est sans doute pas la méthode la plus adaptée à ce que tu veux faire, mais il est assez facile de modéliser les objets déformables avec des réseaux de ressorts (ça donnera plus un aspect "arbre gonflable", mais tu devrais t'en tirer pour un effet réaliste en jouant sur la raideur des ressorts). Mots-clefs : "spring nets" je pense.
Edit : Et juste histoire de recentrer ça dans la catégorie, il y a le site www.sodaplay.com qui utilise cette technique (en 2D), mais applique une force oscillante à chacun des points pour obtenir un mouvement.
Marsh Posté le 13-05-2005 à 03:47:45
dans 3ds max 6 et plus t'as un module qui s'appele Reactor. il te permet de simuler la friction , l'impact et les déformation dûes à ces paramètrez ainsi qu'à la nature " flexible" de l'objet ou des objets en question. c'est un module un peu prise de gueule, et les exemples donné dans les tutos concernent plus des balles qui se déforment quand elles rebondissent, ou un tube de caouthcouc, mais c'est la même idée.
Marsh Posté le 13-05-2005 à 04:32:57
Voui ben je suis pas parfaitement vraiment un progueu, et si darth passe par ici il pourra peut etre filer un coup de main, mais il me semble que le principe, bien que simple, risque de te filer du fil à retordre si tu compte le taper en c/c++. Dit simplement, le but de la manoeuvre est de définir 2 corps qui ne peuvent pas se situer l'un dans l'autre (en terme d'espace), et par conséquent il faut calculer à chaque frame (donc en temps réel j'imagine que le calcul se fait en permanance ou quand l'un des deux objets est à proximité de l'autre), calculer donc les zones d'intersection des deux mesh à différents niveau qui donneront plus ou moins de précision (edges/vertices/polys, etc). En fonction du point d'impact, je parts du principe qu'un certain nombre de parametres, tels que la vitesse de l'obet A, sa trajectoire sur x images, sa rigidité, etc vont être mis en équation pour te donner la vitesse et la direction de déplacement de chaque point d'intersection entre chaque mesh, et pour chaque mesh (en loccurence si le perso est animé/rigide, il peut etre bloqué ou continuer sa route).(c'est d'ailleur en gros le principe des simulations de reactor ou simcloth si je ne m'abuse)
Principe assez basique c'est clair, mais aller mettre ça en application en c++, si tel est bien ton but, vu le nbr de parametres/rapports/variables à gérer, ben bon courage (en partant du principe que tu n'as pas de bagage en prog ).
Voilà un post qui s'avère sans doute inutil, mais qui me fait passer le temps
edit: en fait j'aimerais bien que darth vienne donner une explication poussée, histoire de bien comprendre
Marsh Posté le 12-05-2005 à 15:54:21
Par un exemple: Admettons que je veuille créer un arbre en 3D, quelle genre d'algorithme, s'il en existe pour cela, ou de concept, me permettrait de faire en sorte que lors d'une détection de collision sur un point précis selon une force déterminé ferait bouger le reste de l'arbre en fonction de ce point de touché ?
Exemple: j'appuie sur une branche, alors tout ce qui est attaché physiquement à cette branche suit un mouvement selon la pression établie.
En clair je voudrais pouvoir créer un arbre réaliste pour quand le bonhomme rentre dedans, toute les branches et le feuillage se déplace en fonction de la collision par rapport au bonhomme. Ce qui éviterait d'avoir des arbres statique avec des branches et des feuilles qui reste figé lorsque le bonhomme se camoufle dans le feuillage par exemple, comme on voit dans les jeux 3D.
Je ne sais pas du tout s'il y a un nom pour ce principe et ni comment chercher cela sur google.
Merci de votre aide