-
[java3D][collision]
bonjour,
je m'adresse uniquement aux mordus de l'API 3D:
je dois gérer les collisions possibles entre plusieurs shape3D.
Mon besoin est dans un premier temps, récupérer les shapes en collision - pas de pb :lol: - et ensuite plus dur, récupérer les parties de géometrie commune - voici mon pb :cry: -
si qq a une idée, merci de bien vouloir me mettre au courant.
bonne journée à tous
:wink:
-
je n'utilise pas l'API java3D, donc je ne sais pas si il existe des fontionnalités pour la détection de collisions. Je sais simplement que l'API utilise un graphe de scene qui représente une scène de manière hiérarchique en utilisant des volumes englobants (sphère ou boite)
Donc il est probable qu'une fonction existe permettant de tester si deux volumes englobant se collisionnent, mais à mon avis tu ne pourras pas descendre au niveau des éléments de ton objet. Vérifie dans la doc de l'API.
Si tu dois développer ton propre algorithme :
:arrow: La méthode la plus simple, mais aussi la moins performantes consiste à déterminer les collisions dans cet ordre : face/sommet, face/arête, arête/arête,face/face, arête/point, point/point. du plus fréquent au moins fréquent...
:arrow: Un algorithme plus performant et numériquement très robuste mais limité aux polyhèdres convexe, est l'algorithme V-Clip (Voronoi-Clip).
En fait pour utiliser cet algo dans tous les cas, tu devras trouver l'enveloppe convexe (plus petit polyhedre convexe englobant) de chaque objet mobile de ta scène. Pour ca, utilise l'algo QHull (Quick-Hull).
j'espère que ca pourras t'aider
-
getCollisionBounds() et bounds ne te satisfont pas?
-
en fait, je ne veux pas de collision sur bound mais sur géométries et de plus, je désire récupérer la géométrie résultante!!!! et ça c'est pas donné!!!
-
Si mes souvenir sont corrects, on ne peut pas le faire avec l'API 3D.
Il faut le faire toi même, ce qui est loin d'être simplesi tu veux fabriquer de maniére visuelle l'itersection. Par contre d'un point de vue mémoire, pour faire des tests, là tu peux toujours crée ta classe volume, faire des volumes héritant, par exemple les plus classique, paralllépipède rectangle, sphére, ovoïde, cilyndre, ... et dire que ton volume resultant est en fait l'intersection, union, privation, de ces volumes de base. Il devient alors aisé de calculer l'intersection.
JHelp
-
au fait tu cherche à déterminer le volume représentant l'intersection de objets, ou bien déterminer les éléments géométriques (face, arête, sommet) des objets à l'instant précis de la collision, c'est à dire lorsqu'il n'y a pas encore d'intersection?
Si tu est dans le premier cas, c'est surement pour faire de la modélisation par opérations booléenne, sinon je vois pas à quoi ca sert. Le deuxième cas est plutot utilisé dans les simulations de physique. Car pour calculer la quantité de mouvement et le moment cinétique après le choc, tu as besoin de l'élément géométrique de chaque polyhèdre en collision.
Dans le premier cas, le calcul de volumes par opérations booléenne se fait avec les arbres BSP (constructing solid geometry) . Dans le deuxième cas, il vaut mieux faire l'approximation par un polyhèdre convexe englobant si un parallélépipède ou une sphère englobante ne te suffit pas. Ainsi tu es certain que seulement un élément geo entre en collision avec un seul autre. l'algo v-clip par exemple est utilisé, mais il y en a d'autres plus ou moins complexes, robustes, et performants...
bref, t'as pas fini de codé !! :wink:
-
Je pense qu'il est dans le premier cas. Voir un autre de ses posts:
http://www.developpez.net/forums/viewtopic.php?t=71872
-
Bonjour,
Je suis à la recherche de la même information que Geofun. Je cherche à obtenir le volume résultant de l'intersection de deux volumes.
Sauf erreur de ma part, Java3D ne permet pas de réliser ce type d'opération :(
Ce topic m'a l'air un peu abandonné, mais si qqun (voire Geofun lui-même) possède des infos à ce sujet, je suis preneur ;)