Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1312 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  detecter collisions ds un monde en 3d

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

detecter collisions ds un monde en 3d

n°977572
mat74
Posté le 10-02-2005 à 13:05:12  profilanswer
 

salut a ts  
 
voila je travail en ce momment sur un projet de monde en 3d .  
je suis en train d'essayer de détecter les collisions .  
j'ai deja reussi à gerer tout sa en 2d , cad negliger z. Mais j'aimerais pouvoir gérer les collisions avec le sol et le plafond. je pourrais ainsi faire plusieurs étages ds mon monde.  
il faudrait donc que j'arrive a détecter les collisions entre la camera ( que je considere comme un point ) et les murs que je considere comme des plans.  
j'ai stocker ds une liste 3 points appartenant a chaque mur.  
Mais je n'arrive pas trouver l'équation du plan qui passe par ces 3 points.  
 
p1(x1,y1,z1)  
p2(x2,y2,z2)  
p3(x3,y3,z3)  
 
je sais que :  
x1*a+y1*b+z1*c+d = 0  
x2*a+y2*b+z2*c+d = 0  
x3*a+y3*b+z3*c+d = 0  
 
mais comment je peux resoudre cela ?  
 
si qq1 a une autre solution plus simple je suis preneur  
 
( je programme en c++ avec opengl sous windows )
 
merci d'avance  
@+

mood
Publicité
Posté le 10-02-2005 à 13:05:12  profilanswer
 

n°977574
chrisbk
-
Posté le 10-02-2005 à 13:08:27  profilanswer
 

pour de la detection de collision d'homme, faut du bsp ou ot chose (octree, bounding box, ce genre de truc) :o

n°977584
bjone
Insert booze to continue
Posté le 10-02-2005 à 13:32:12  profilanswer
 

alors pour trouver une équation de plan pour un triangle.
tu chopes deux vecteurs V0->V1 et V0->V2 (dumoins p1->p2 & p1->p3)
 
tu fais le produit vectoriel (ou croisé)-> ça te donnes la normale N.
dont la norme = 2*la surface du triangle.
 
ensuite comme "V0.x* N.x +  V0.y*N.y + V0.z*N.z + d" est censé être = 0
d = - V0.x* N.x +  V0.y*N.y + V0.z*N.z;  
 
(soit - le produit scalaire V0.N ).
 
si je dis pas de bêtises.
 
tu peux aussi normaliser N pour des calculs d'éclairages ultérieurs ou autre, avant le calcul de d. (et vérifier que N pointe bien vers l'extérieur matière => vers le volume où la caméra peut évoluer).
 
ensuite pour la collision avec la caméra, tu as le point initial I, le nouveau point I' après déplaçement.
 
si I' inséré dans l'équation de plan est positif, tu est dans le volume évoluable => pas de collision.
 
si avec I' c'est négatif (valeur a) et I c'est positif (valeur b), y'a collision (I->I' traverse le plan), tu as le point de collision en faisant le barycentrage par rapport aux valeus a & b qui sont les distances au plan. (dumoins -a & b).
 
voilà j'ai rien vérifié, donc si je m'ai gourré je m'en fous.
 
my 2 cents.
 
(sinon oui après le mieux c'est d'utiliser des techniques plus évolués, mais pour commençer ça te fera un bon exo)


Message édité par bjone le 10-02-2005 à 13:39:46
n°1046915
coincoin13​07
Posté le 14-04-2005 à 03:10:44  profilanswer
 

Salut. Jai fais un petit prog en C++ & OpenGL qui maffiche des cercles qui se deplacent aleatoirement, avec des couleurs qui leurs sont propres et des entrées clavier.
 
Mais je voudrais pouvoir gerer les collisions entre tous ces cercles, sachant quil y en a plusieurs centaines...et je doute que tester les collisions en tous mes cercles soit une bonne chose, mais bon, passons, je verrais ça plus tard.
 
Ce qui minterresse cest de savoir comment je pourrais detecter les collisions entre ces deux cercles...je connais leur rayon, leur position. Sachant que jai 15 ans et que je suis une quiche en maths :-/. Auriez vous un lien (appliqué a la prog 2D/3D si possible) expliquant ce que sont les "produits scalaires" et ce quest normaliser un vecteur par exemple...car je nai pas bien capté les explications de bjone...
 
En tout cas merci ;-)
A bientot :)

n°1046997
bjone
Insert booze to continue
Posté le 14-04-2005 à 09:34:36  profilanswer
 

pour des cercles, pas besoin, pour chaque couple de cercles que tu veux tester, tu prends la distance entre les centres et si elle inférieure à la somme des deux rayons c'est qu'il y a collision.

n°1047006
Joel F
Real men use unique_ptr
Posté le 14-04-2005 à 09:42:21  profilanswer
 

On fait plus le produit scalaire et les vecteurs au lycée o_O ??
 
A.B = A.x*B.x + A.y*B.y + A.z*B.z
Norm(A) = SQRT(A.A);
 
Normaliser A =>  A'  = A/Norm(A) = A/SQRT(A.A)

n°1047329
coincoin13​07
Posté le 14-04-2005 à 13:37:54  profilanswer
 

bjone==> oui javais compris quil fallait faire comme ça...cest ce que je cherche a faire mais je narrive pas trop a retranscrir ça en C++...les quelques tests que jai fait ne fonctionnaient pas..
 
Joel F==>Si, on doit en faire je pense, mais je suis en seconde et jusqua present on a rien fait sur les vecteurs...a par en 3eme ou ça navait rien a voir, cetait vraiment les bases..
 
Ca veut dire quoi ça ? => "Norm(A) = SQRT(A.A);"
 
Merci
@+

n°1047330
chrisbk
-
Posté le 14-04-2005 à 13:41:28  profilanswer
 

Norme(A) = racine carré de (A produit scalaire A)
 
norme d'un vecteur = sa "longueur"
 
produit scalaire de deux vecteurs normalisé (donc avec une norme de 1) = cosinus de l'angle entre ces deux vecteurs
 
cette derniere formule, c'est le bonheur sur terre


Message édité par chrisbk le 14-04-2005 à 13:41:52

---------------
NP: HTTP Error 764 Stupid coder found
n°1047341
Joel F
Real men use unique_ptr
Posté le 14-04-2005 à 13:51:56  profilanswer
 

coincoin1307 a écrit :


Si, on doit en faire je pense, mais je suis en seconde et jusqua present on a rien fait sur les vecteurs


 
c'est une blague j'espere o_O ...

n°1047345
schnapsman​n
Zaford Beeblefect
Posté le 14-04-2005 à 13:57:37  profilanswer
 

Joel F a écrit :

c'est une blague j'espere o_O ...


bein non?
les produits scalaires c'est en seconde/première il me semble?
en collège les vecteurs ça se limite à la loi de chasles de crois??

mood
Publicité
Posté le 14-04-2005 à 13:57:37  profilanswer
 

n°1047346
Joel F
Real men use unique_ptr
Posté le 14-04-2005 à 13:59:23  profilanswer
 

mouais mais bon si en seconde au mois d'avril ils ont pas entamé les vecteurs ...
 
et je me rappelles avoir vu : A.B = |A||B|cos(AB) en 3e :o

n°1047879
coincoin13​07
Posté le 14-04-2005 à 19:28:57  profilanswer
 

Citation :

A.B = |A||B|cos(AB) en 3e


Et bien lecole a bien changé ! lol
 
Bien sur on fait des fonctions ce genre de choses, mais je peux tassurer qu'on a encore pas touché aux vecteurs; ils sont au chapitre suivant, je vais regarder mon livre de maths :p  
 
De plus, schnapsmann a raison, en 3eme les vecteurs s'sarrete a la relation de Chasles...et rien de plus. Et l'an prochain je ferais ES (plus de physique), donc je n'entendrais (je pense) pas parler de produits scalaires et autres formules durant ma scolarité...nest-ce pas ?
 
Mais la nest pas la question, je vais essayer de voir ce que je peux trouver sur le net.
 
Merci pour vos interventions ;-)


Message édité par coincoin1307 le 14-04-2005 à 19:31:48
n°1047955
Joel F
Real men use unique_ptr
Posté le 14-04-2005 à 20:43:50  profilanswer
 

[:pingouino]


Message édité par Joel F le 14-04-2005 à 20:44:45
n°1048182
coincoin13​07
Posté le 15-04-2005 à 00:40:58  profilanswer
 

Et oui, c'est malheureux... :D  
Je te sens un peu comme... :pt1cable:  lol
 :D  


Message édité par coincoin1307 le 15-04-2005 à 00:42:26
n°1071295
c0wb0y
:d
Posté le 04-05-2005 à 09:32:55  profilanswer
 

Joel F a écrit :

mouais mais bon si en seconde au mois d'avril ils ont pas entamé les vecteurs ...
 
et je me rappelles avoir vu : A.B = |A||B|cos(AB) en 3e :o


 
 
il me semble avoir vu c en 1ère S ^^
(c'est il y a dire a 4 ans)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  detecter collisions ds un monde en 3d

 

Sujets relatifs
"Détecter" un lecteur CD ?Detecter la présence de flash
Detecter la fermeture d'une fenetre[JAVA Socket] ou comment detecter qd un client s'est deconnecté?
[shell] detecter l'insertion d'un cdrom en shell[Resolu] Détecter la présence d'un codec MCI MP3
Detecter la fin de lecture d'une MIDI avec lecture via MCI, & boucle?Detecter la résolution du moniteur pour charger une page adaptée
Détecter le plug-in FLASHRecherche logiciel simulateur de collisions...
Plus de sujets relatifs à : detecter collisions ds un monde en 3d


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR