Accueil > Forum > > > > collison 3D
collison 3D
vendredi 19 août 2005 à 14:04:07 |
collison 3D

cppdupdup34
|
voila j'ai un petit souci dans mes detections de collision. le test de collision entre un point et un pavé orienté n'importe comment dans l'espace s'effectue sans souci. le probleme que j'essaye de resoudre c'est de connaitre la face par laquelle je suis rentré dans le cube en ne connaissant que la position a l'instant (t) et a l'instant (t-1) une solution c'est: de trouver le point d'intersection entre les plans et la droite engendree par le vecteur v = pos(t) - pos(t-1) passant par pos(t) puis de calculer la longueur algebrique entre le point pos(t-1) et le point d'intersection. la longeur algebrique la plus courte et positive entre les 6 faces sera la bonne. mais bon ca fait beaucoup de calculs... si vous aviez une idee, je suis preneur   cppDupDup34 
|
|
vendredi 19 août 2005 à 14:10:39 |
Re : collison 3D
|
vendredi 19 août 2005 à 15:25:03 |
Re : collison 3D

luhtor
|
Calculer un point d'intersection, c'est jamais bon en calcul. Pour éliminer 3 faces sur 6: vecteur T = pos(t) - centre_du_cube. si le produit scalaire de T par un vecteur normal d'une des faces du cube est négatif, alors l'objet est de l'autre coté de cette face, et ne peut donc pas rentrer en collision avec cette face. Pour la suite: Ca peut etre rapide, mais il faudrait plusieurs élement en mémoire. L'idée c'est de voir dans quel volume engendré par une face du cube et son vecteur normal, l'objet se trouve. Deja, tu connais l'orientation de ton cube, donc tu peux avoir la matrice de changement de base, entre les coordonnées 3d, et une base liée a ton cube. (une base orthonormale sympathique, telle que ses vecteurs soient normaux aux faces) si M c'est la matrice de transfert des coordonnées 3d à la base du cube. et M' l'inverse (sa transposée puisque M est une matrice de rotation) (en passant, M s'obtient facilement et la méthode est rapide si ton cube bouge pas, s'il bouge, faut faire 3 calcul matriciel en plus). Si O est le centre du cube, soit vecteur P = Pos(t) - O, donc P est le vecteur allant du centre du cube à ton objet. alors P ' = M ' x P, c'est les coordonnées de ton objet dans la base du cube. Et la c'est fini. Tout dépend comment tu as choisis la base. Mais tu compares les coordonnées avec les demi coté de ton pavé (ou cube). Ca permet de savoir quel est la face en question parmi les 3 qui restaient. Donc en résumé, ca donne: 6 produits scalaires. 1 calcul matriciel. 2 comparaisons. Si ta des questions :) j'essais de faire une image
|
|
vendredi 19 août 2005 à 15:51:00 |
Re : collison 3D

luhtor
|
suite: Je sais pas comment tu fais ton test de collision, si tu détectes une collision, il faut donc seulement effectuer la deuxième partie du test (produit matriciel et test de comparaison). Mais je sais pas comment on insère une image donc...
|
|
vendredi 19 août 2005 à 16:04:34 |
Re : collison 3D

neodelphi
|
Si tu cherche à faire un moteur physique en 3d il faut détecter les collisions entre ton point et ton volume d'une autre façon:
le meilleur moyen de savoir si ton point est entré en collision est de chercher un plan séparant tout les points de ton volume d'un coté et ton point seul de l'autre. Pour trouver ce plan il faut tester tout les plans qui sont les faces de ton volume à l'aide du produit vectoriel. Si tu trouve ce plan c'est que ton point seul n'est pas dans le volume, il n'y a pas de collision. Si en revanche tu ne trouve pas de plan, c'est qu'il y a collision, et la la méthode de l'intersection plan/droite va te servir.
Avec la méthode des plans tu peut optimiser ton programme grace à la cohérence temporelle: lorsque tu cherche le plan de séparation entre le point seul et les points de ton volume tu commence par regarder si le plan qui les séparait à l'étape précédente les sépare toujours. Si oui, c'est pas la pein d'aller plus loin il n'y a pas de collision. Sinon bah tu peu tester tout les plans comme au début, ou alors si tu veut la jouer pro utiliser les diagrammes de Voronoy: méthode qui consiste à tester les faces à proximité de la face de l'étape précédente en priorité (toujours grace à la cohérence temporelle).
Petite précision: ces méthodes s'appliquent à des volumes convexes, pour des volumes concaves ça se corse.
neodelphi
|
|
vendredi 19 août 2005 à 16:20:04 |
Re : collison 3D
|
vendredi 19 août 2005 à 17:46:27 |
Re : collison 3D

luhtor
|
Le produit vectoriel est lourd en calcul et le calcul d'un point d'intersection est lourd également, donc je vois pas l'utilité de chercher ton plan de séparation.
|
|
vendredi 19 août 2005 à 23:42:47 |
Re : collison 3D

neodelphi
|
Chercher un plan de séparation est ce qu'il y a de plus courant grace aux méthodes d'optimisation avec la cohérence temporelle, on le retrouve dans beaucoup de moteurs physiques actuels.
Euh finalement c'est pas avec le produit vectoriel mais le produit scalaire je croit. Tu prend une face de ton volume, un triangle en général, tu applique un produit vectoriel entre deux cotés du triangle pour calculer la normale à la surface. Ensuite tu fait le produit scalaire entre cette normale et le vecteur qui part d'un point du triangle au point que tu teste. En fonction du signe de ce produit scalaire tu est capable de déterminer de quel coté de la face ton point est. Comme tu a un solide convexe, tout les points de ton solide sont du meme coté du triangle, donc si le point est de l'autre coté, tu as trouvé un plan de séparation.
De plus un produit vectoriel n'est pas lourd du tout a effectuer, c'est juste des additions et des multiplication. Ce qui est lourd c'est chercher le point d'intersection entre un plan et une droite à cause des divisions et des tests de colinéarité, c'est pour ça qu'il faut le faire que si tu est sur qu'il y a collision.
neodelphi
|
|
samedi 20 août 2005 à 12:15:57 |
Re : collison 3D

luhtor
|
Bas un produit vectoriel, c'est quand meme 12 multiplications. Mais si ca règle le problème du facteur temporelle c'est pas mal. Car ce que je proposais ne fonctionne que si le fps est élevé. Mais le problème posé, n'était pas déterminé s'il y a collision, mais quelle face est touchée.
|
|
samedi 20 août 2005 à 16:03:37 |
Re : collison 3D

neodelphi
|
Ouai mais avant de chercher quelle face est touchée, faut savoir si il y a collision... De plus, une fois que tu sais qu'il y a collision, grace à la cohérence temporelle la face touchée est à 95% le plus souvent le plan de séparation de l'étape précédente. Donc si tu veut un truc super rapide, tu calcul pas la face touchée car tu as 95% de chance que ce soit le plan de séparation précédent. Les rares cas où ce n'est pas vrai c'est lorsque le point entre en collision presque sur un sommet du volume. Si ton moteur physique tourne bien, on n'y verra que du feu.
Ce qu'il faut avoir en tête quand on réalise un moteur physique pour jeux videos, c'est qu'il ne faut pas faire comme dans la réalité: un moteur physique de jeux videos se doit de paraître réaliste, et je dit bien paraître ! Il faut laisser tomber toutes les exception, et s'arranger pour que ça rende bien (d'où la prise du plan de séparation précédent, plan qui parait réaliste).
Si tu est physicien il faut que tu oubli la physique un moment pour faire ton moteur car sinon tu deviendrai maboul, une vrai simulation est tellement compliquée à mettre en place qu'elle serait bien trop lente pour les jeux videos...
neodelphi
|
|
Cette discussion est classée dans : 3d, souci, collision, pos, collison
Répondre à ce message
Sujets en rapport avec ce message
collision ds un monde 3d [ par mat74 ]
salut voila je cherche comment gerer les collision ds un monde 3dsi vs connaissez un site sur le sujet ou alors si vs pouvez m'expliquer .j'utilise op
Collision 3D [ par DJPierreB ]
Actuellement, j'ai fait un programme qui dessine les murs et le sol d'une pièce.Je sais me déplacer dans la pièce. Je voudrais donc y ajouter des test
Gestion de collision dans un espace 3D [ par vincemail ]
Bonjour à tous, je suis en train de programmer un petit jeu en 3D avec OpenGL, et je reviens à ma gestion des collisions. En effet, pour le moment je
Collision entre objets 3D [ par mmaximum ]
Salut à tous,Je suis nouveau sur le forum. Je sais déja bien programmé(c/c++, python, xhtml/html, css, javascript,...)Je suis en train de développer u
Dark GDK [ par Nicolas___ ]
Bonjour,Dans le but de m'amuser un peu , j'ai envie de creer des minis-jeux en 3d (je connais deja la programmation et je me suis deja amuser avec la
collision [ par adelus ]
je cherche un programme de detection de collision entre 2 robots 3D dans un environnement virtuel merci a vous
liste circulaire contigue [ par bidouza ]
bonjour a tous,voila je suis sur un projet de "liste circulaire contigue" en langage c , mais là je coince sur la fonction supprimer, en fait je n'arr
petit souci sur mpi [ par diable007 ]
bonjour,j'ai besoin d'envoyé une matrice en MPI,je travaille avec c++ et les vector >Ma_matrice;comment je peux envoyer ça directement au lieu de fa
Quelle librairi audio choisir [ par mmaximum ]
Salut à tous,Je cherche à faire un petit moteur de jeu 3D, mais je bloque sur le moteur sonore.Est-ce que quelqu'un connait un petit librairi audio po
Matrice 3d [ par tarekor31 ]
Bonjourj'ai un probleme je doit reflechir a recuperer une matrice 3d depuis un fichier .obj sous C++, il me faut mettre mon objet en forme de tranches
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|