Les collisions

StrikerFred Messages postés 98 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 4 novembre 2010 - 18 sept. 2006 à 18:28
StrikerFred Messages postés 98 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 4 novembre 2010 - 19 sept. 2006 à 19:40
bonjour !
bon maintenant que je sais créer des vertices (sans textures pour le moment) et me déplacer, j'aimerais mettre des collisions

alors vous allez me dire que y'a déjà plein de sujets. Mais j'aimerais savoir comment faire des collisions SIMPLES avec les carrés que je fais en vertices, y'a pas de personnages devant la caméra, faut juste que on traverse pas les carrés ! lol ils sont fait avec une simple structure:
struct VERTEX
{
     FLOAT x,y,z;
     DWORD color;
};
et en voilà deux images:

j'ai tout à fait compris l'algo mais je sais pas comment tester ces collisions POUR DES SIMPLES VERTICES (et pas pour des objets):
Pour tous les murs présents
si mur.Collision(personnage) == true
{
    alors le personnage ne peut pas avancer.
    quit
}
Aucun obstacle, le personnage peut avancer.


donc si on pouvait me donner un tutorial TRES simple (en francais svp) ou mieux, m'expliquer sur le forum? (oui j'en demande beaucoup...)
ca pourra, je l'espère me faire une intro pour les collisions "normales"

voilà! merci d'avance ! 
a+ !

11 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 sept. 2006 à 18:37
T'as quel niveau de maths ?
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
18 sept. 2006 à 18:42
Avec tes points tu peux calculer une equation de plan.Avec cette eqution de plan tu peut voir s'il va avoir une collision.
Equation de plan ax + by +cz = 0
Position du perso P (xp, yP, zP)
Position du perso apres déplacement Q (xQ, yQ, zQ).
si a * xP + b* yP + c * zP est du meme signe que a * xQ + b* yQ + c * zQ pas de collision
sinon collision
Faut aussi prendre en compte a position du point pour savoir s'il y est en face des 4 points qui définisse le rectangle.

++
0
StrikerFred Messages postés 98 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 4 novembre 2010
18 sept. 2006 à 20:31
ne rigolez pas, j'entre en seconde ^^
mais je suis logique et je suis pret à apprendre (pour les besoin de la programmation) toutes les règles qu'il faudra ^^

ca a l'air interressant l'équation de plan mais j'ai pas tout compris
ou interviennent les points de mes carrés de vertex ? fait-on l'équation pour chaque carré, chaque droites (chaque points ?) ?
la en l'occurence j'ai 12 instance de la structure vertex (1 triangle = 3points, mes carrés sont fait de 2 triangles.. lol)

moi on m'avait dit de faire une bounding box et des évalutations :
if(xminPerso > xmaxMur) then pas de collision
if(xmaxPerso < xminMur) then pas de collision
etc....etc....

mais je sais pas... ton évaluation de plan a l'air cool

bon, merci d'avance !!!

a+
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 sept. 2006 à 20:59
Arf oue seconde. Avec des produits scalaire ca se fait très facilement,
mais tu devras attendre quelques années. (plusieurs meme).

Tu as besoin de gérer des grandes map ? Car sinon, tu créés un tableau
2D (1d en fait, mais que tu vois à 2 dimension), donc c'est une sorte
de damier. Si la case est noir, ca veut dire que ya un obstacle, si
elle est blanche le joueur peu avancer. Tu remplis ce damier à partir
de la liste des murs que tu as. Le pb est que si tu veux que le joueur
glisse le long du mur, ca risque d'etre un peu chiant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
StrikerFred Messages postés 98 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 4 novembre 2010
18 sept. 2006 à 21:20
mais faut m'expliquer le produit scalaire ! je veux bien apprendre
ben je demenderai à mes ainés, ils m'expliqueront

bon, pour le système de damier (les tuiles en langage 2d non?) je connais et je pense que c'est pas ce que je veux, oui oui je veux des vrais collisions, je veux faire un vrai jeu (complet, vendu des millions, je suis riiiiche ! non je rigole)

vous me prennez pas au sérieux, mais c'est pas un petit passe-temps, je veux en faire mon métier plus tard! j'ai appris différents langages, je me lance dans la 3d, autant que j'apprenne ces règles de math maintenant ! lol
je sais que dans les math de haut niveau, y'a des trucs assez abstrait (le nombre i non? je dis ptètre que des bobards) mais j'ai l'esprit ouvert  ! heum... bon

voilà donc produit scalaire ou se que tu veux, je suis pret à apprendre ! (et a y passer du temps aussi)

a+ et merci d'avance !
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
18 sept. 2006 à 21:49
"ces règles de math maintenant". <= oui mais c'est bien ca le pb.
C'est pas des règles de maths qu'il faudrait que tu apprennes, c'est
les maths tout court. Et c'est pas le lycée qui te l'apprendra. Donc
j'ai bien peur qu'il te faille être partient.


Le nombre "i", c'est que de la "gueule" ca. Ya rien de compliqué derriere, mais pour la 3D, ca sert a rien.


En bref, faut au moins que t'attende une année pour avoir une
introduction aux vecteurs, sauf si tu as qqn pour t'aider, mais auquel
cas tu n'aurais pas posté ici. (tout ca, n'est que mon avis personnel)
0
StrikerFred Messages postés 98 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 4 novembre 2010
19 sept. 2006 à 07:26
aha.... ben je veux bien apprendre les "maths tout court" aussi ! et puis, j'ai quelqu'un qui peut m'aider, mais que en math! il connait strictement rien en programmation donc ne pourrais tu pas me dire la facon de détecter les collisions avec les produits scalaires ? sinon je te dis que j'ai le niveau de math de 3ans après le bac et voilà ^^

non sérieusement, je veux savoir ! je suis convaincu que c'est pas si compliqué que ca


 
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 sept. 2006 à 13:18
Hypothèses: Tous tes murs sont de dimensions identiques et situés à la meme altitude. Avec ca, c'est relativement simple.

Donc on peut voir tes murs comme des segments sur un plan. Pour chaque
mur, on définie un rectangle 3D englobant si le joueur rentre dans ce
rectangle, alors il doit etre repoussé.


Pour chaque mur, faut calculer le vecteur normal, le vecteur tangentielle (direction des segments) et le centre des segments.

Evidemment, tous les vecteurs doivent etre normalisés. (longueur 1)


Faut apres te donner une distance minimale a partir de laquelle le joueur doit etre bloqué (epsilon).

Soit O le centre d'un mur et M la position du joueur.

Soit N le vecteur normal au mur et T le vecteur tangentielle.


Le produit scalaire de OM par N te donne la distance entre le joueur et
la face du mur et OM scalaire T donne la projection du joueur sur le
mur.

Donc en gros:

le joueur touche le mur si :

(valeur absolue de (OM scalaire N) < epsilon)  ET  (valeur
absolue de (OM scalaire  T) < epsilon + demi longueur d'un mur).


Lorsque le joueur touche le mur, suivant le coté ou il touche, il faut
supprimer une composante de la vitesse pour pas qu'il passe a travers.


Donc demande a tes connaissances pour t'expliquer le produit scalaire, le calcul du vecteur normal et tangentielle.
0
StrikerFred Messages postés 98 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 4 novembre 2010
19 sept. 2006 à 18:46
oua super! merci pour la réponse, je vais demander et ensuite je pense que je comprendrai ! si jamais, je poserai d'autres questions ^^

bon, d'un point de vue plus "directx", on passe tous les murs dans une boucle et on vérifie ca? la composante de la vitesse qu'il faut enlever, comment on la connait? si j'ai compris, si le joueur allait tout droit, (que du z) on supprimerai l'évolution en z et s'il avancait que avec du x (je sais pas si c'est compréhensible) on supprime "l'évolution" en x non?

mais si y'a un peu de x et de z, comment fait-on ? (je veux que le joueur glisse sur les murs)

merci! a+
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 sept. 2006 à 18:57
Oue voila, mais si ya un peu de x et de z, ca change rien. C'est le meme calcul.

Soit N le vecteur normal a l'endroit du contact et V le vecteur vitesse.

Vitesse = Vitesse - (Vitesse scalaire N) * N. <= ca, ca enleve la composante de la vitesse suivant N.
0
StrikerFred Messages postés 98 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 4 novembre 2010
19 sept. 2006 à 19:40
ok, merci bien !
oua ca va faire pro de mettre ca dans un programme ! non je rigole. Donc je penses que tu as tout dit là pour faire les collisions? et si jamais, je ferai un sujet les collisions (2)

en espérant que jevais comprendre,
merci beaucoup et a+
0
Rejoignez-nous