| Collisions |
Lo

Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
|
| Ecrit le: 20 Dec 2008, 14:16 Message non corrigé | |
|
Pour les collisions avec le sol, j'ai une idée.
En fait, il faut calculer la distance entre le point le plus bas et le point le plus haut de la montée ou de la descente.
Et en fait, logiquement, seule la position de y doit changer en fonction de l'inclinaison de la pente.
En gros, si la pente monte, py doit diminuer, sinon, il doit monter.
Le plus difficile reste de savoir calculer py.
En faite, j'ai chercher sur le net et sur le site du zéro j'ai trouvé un truc ou il explique les coordonnées polaire.
On peux facilement retrouver x, y et z en fonction de de l'angle, et du rayon d'une sphére.
Ce principe à été utiliser pour la Free Fly Camera, ou le lookAt bouge en fonction de l'angle formé grâce au déplacement de la souris.
Mais là, le problème étant que ce n'est plus la souris qui fait déplacer le pesonnage, mais la pente!
Donc, si je me base sur sa formule pour retrouver donc y, x et z étant détermine toujours par pz += cos (angle) * vitesse de déplacement et px += sin (angle) * vistesse de déplacement.
py serait alors égal au point le plus bas + le sin de l'angle (l'inclinaison) * le rayon.
Le problème reste, comment calculer le rayon de la pente, en effet, il ne se calculera pas à partir du point 0, 0, 0.
Donc, il faudrait pour le bien stocker dans une liste le point le plus bas, et le plus haut de toutes les pentes, afin ainsi de pouvoir tracer les triangles.
Et en fonction de ses données, déterminer la position n y du personnage.
Alors, le point le plus haut, ses coordonnées, je vais les appeller xh, yh et zh.
Et les coordonnées du point le plus bas, xb, yb et zb.
Pour calculer donc le rayon, de la pente, il faudra faire :
Il faudra à partie de ça, calculer le rayon entre le point le plus bas, et le personnage.
Donc on a un triangle rectangle entre le bas de la pente, la position du personnage, et le haut de la pente, si on ne tient pas compte de y.
Pour calculer le rayon, il faut, calculer l'hypothènuse de ce triangle, qui sera égale à (px - xb)²+(pz-zb)²
Ensuite pour retrouver py, on utilise la formule que j'ai écrite plsu haut en faisant :
py += z * sin (angle)
L'angle étant l'inclinaison de la pente par rapport au niveau du sol.
Maintenant, est ce que ça va marcher, je dois encore tester pcq j'avoue que c'est pas simple à mettre en oeuvre.
Mais en tout cas, je vais d'abords faire ça en 2D, je pense que ce serait mieux de d'abord expliquer comment le faire en 2D, ce sera plus simple.
PS: j'ai réussi à dessiner un terrain en pente en 2D avec Java, et à déterminer les collisions avec le sol et le personnage, les personnages étant de simple images bitmaps.
Si Maintenant, je rechercher à faire des images animées du genre les gifs.
________ Parce qu'on ne peut s'exprimer que par nos créations. ^^
|
|
| |
|
|
David

Grade : Expert
Inscrit le: 11 Mai 2005, 20:30
|
| Ecrit le: 20 Dec 2008, 21:29 Message non corrigé | |
|
J'ai pas très bien compris tes expliquations.
Par contre, pour ce qui est des pentes, je penses qu'il faut faire un objet par pente ou tu enregistreras les coordinés des points de la pente dans des attribut de la classe pente.
Par contre, je sais pas si t'as remarqué mais les pentes sont des triangles.
Pour l'instant, si j'ai bien compris, tu arrives à detecter les collisions cercle-segment sur un plan en 2D.
________ Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
|
|
| |
|
|
Lo

Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
|
| Ecrit le: 22 Dec 2008, 10:30 Message non corrigé | |
|
Waip c'est ça, les collisions cercle segment sur un terrain 2D, j'ai fait avec le théorème de thallès.
Donc j'ai une liste de pentes, avec le point du haut, et celui du bas.
Et j'ai aussi la position de la balle, qui sera un personnage ensuite.
Et en fait, ce que j'ai constater, c'est que, il y a un triangle rectangle, qui est formé.
Le théorème de Thalès, qui est simple à comprendre, dit que le rapport de la distance entre les deux points de la pente en x, et en y est le même, donc pour calculer la position du personnage en y, c'est facile.
Donc, supposons que le point en bas de la pente est à 0, 0 et le sommet est à 10, 10.
donc on a deux points : p1(0, 0) et p2(10, 10)
La balle se trouve en x = 5.
donc px = 5 et py = ?
Et je veux calculer sa position en y.
Bah je peux dire que px - p1.x / p2.x - p1.x = py - p1.y / p2.y - p1.y
Donc : le rapport vaudra 5/10 ce qui fait 1/2.
Je vais mettre un d devant, maintenant, d voulant dire distance.
Soit donc dx = px - p1.x qui fait 5 (distance entre la position x de la balle et le point en bas de la pente)
Dx = p2.x - p1.x qui fait 10 (distance entre la position x du point en haut, et celle du point en bas)
dy = py - p2.y inconnu.
Dy = p2-y - p1.y qui fait 10
dx/Dx = dy/Dy. (Thalès)
Donc dy = dx/Dx * Dy.
Donc dy = 1/2 * 10 ce qui fait logiquement 5.
La balle se trouve donc en (5, 5)
Fin j'ai fait comme ça, ça marche nickel, il me détecte les collisions entre la balle et les segments des pentes que j'ai faîtes.
Mais il y a un autre problème qui apparait en 2D.
En effet, la fenêtre n'est pas assez grande pour tracer tout le terrain.
Du coup, il y a un problème, il faut faire ensorte que lorsque le personnage avance, le terrain avance aussi!
Et lorsque le personnage recule, le terrain aussi!
Et ça, je vois pas du tout comment le faire.
Fin tu vois les jeux du style mario land ou il y a le paysage qui avance et recule tout seul.
________ Parce qu'on ne peut s'exprimer que par nos créations. ^^
|
|
| |
|
|
David

Grade : Expert
Inscrit le: 11 Mai 2005, 20:30
|
| Ecrit le: 22 Dec 2008, 11:04 Message non corrigé | |
|
Si tu le fais avec OpenGL, pour déplacer le contenu de ta map vers la gauche quand tu avances vers la droite, tu peux modifier la position de la caméra vers la droite.
________ Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
|
|
| |
|
|
Lo

Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
|
| Ecrit le: 22 Dec 2008, 11:14 Message non corrigé | |
|
Euh, non c'est pas avec openGL, c'est avec Java, mais j'ai réussi!
En fait, il faut décaler tout vers la gauche, quand on avance, et vert la droite quand on recule, avec une variable que j'ai appeler décalage, et voilà, le paysage avance et recule tout seul!!
Et il faut pas oublier de tenir compte du décalage pour le calcul de la position y de la balle.
Super, ça marche!
Euh par contre, y'a pas des tutos ou il explique la 3D isométrique ?
________ Parce qu'on ne peut s'exprimer que par nos créations. ^^
|
|
| |
|
|
OSasuke

Grade : Connaisseur
Inscrit le: 29 Juin 2008, 10:54
|
| Ecrit le: 29 Dec 2008, 13:52 Message non corrigé | |
|
Moi je ne me casse pas trop la tete , J'utilise un moteur 3D et moteur physique et voila .
Maintenant je suis entrain de faire un véhicule ( une voiture ) avec le moteur physique newton , j'ais terminer , j'ais seulemnt un probleme avec la camera :
Quans le joueur marche a pied la camera est a merveille , mais quand il monte dans la voiture , ben ce n'est pas chouet.
Si vous voulez télécharger mon programme voia :
________
|
|
| |
|
|
Lo

Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
|
| Ecrit le: 29 Dec 2008, 14:25 Message non corrigé | |
|
Pour ma part, je fait une classe FPSCamera pour gérer la caméra et les déplacements.
Bah en tout cas moi, nickel la camera, le perso saute, avance, recule, tourne, etc...
________ Parce qu'on ne peut s'exprimer que par nos créations. ^^
|
|
| |
|
|
Lo

Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
|
| Ecrit le: 20 Mai 2009, 12:41 Message non corrigé | |
|
Super j'ai enfin trouver un site pas mal et il y a un tutoriel ou il parle de la 3D isométrique. Pour ceux qui connaisse c'est game-corp.
________ Parce qu'on ne peut s'exprimer que par nos créations. ^^
|
|
| |
|
|
Lo

Grade : Expert
Inscrit le: 26 Dec 2007, 17:33
|
| Ecrit le: 05 Juin 2009, 15:49 Message non corrigé | |
|
En fait ce que je voulais dire c'est que les triangles sont composés de deux segement, la hauteur et la base, il suffit de calcules la collision avec la hauteur et ensuite avec la base, en tout cas c'est comme ça que je fait et ça à l'air de marcher en console, il reste plus qu'à tester en mode graphique.
Par contre pour les polygônes (pour les murs et les bâtiments) je ne suis pas sûr de mon algorithme, j'ai un algo qui recherche vers quel face le perso se trouve par rapport au centre du polygône, prends un point de la face et calcule le rayon, ensuite qui détermine la tangente de l'angle entre le même point de la face et la position du personnage, et enfin je plaque la tangente sur la face du polygône pour à l'aide d'une translation suivie d'une rotation pour trouver le point de collision sur la face du polygône par rapport à la position du perso, je calcule le nouveau rayon entre le point de collision et le centre de la boite, et enfin la distance entre le centre de la boite et le personnage, et là j'ai plus qu'à faire le test avec le personnage.
________ Parce qu'on ne peut s'exprimer que par nos créations. ^^
|
|
| |
|
| |