Le source de mo programme est disponible ici : http://rafb.net/paste/results/Xpc4G989.html
J´ai fait un petit monde 3D avec OpenGL. Il n´y a rien de très compliqué : un sol, 4 murs et un plan incliné. Mon but est pour l´instant d´avoir une détection des collisions à peu près correcte. Le problème se trouve dans la fonction TestPosition() (ligne 343).
Voici, en gros, comment je procède :
- je sauvegarde la position qu´avait le joueur lors du précédent appel à cette fonction dans la structure PositionJoueurPrecedent
- je récupère la position du jour actuelle et je la mets dans la structure PositionJoueur
- je compare PositionJoueurPrecedent et PositionJoueur
- si entre les deux positions le joueur a traversé un mur, je modifie sa position (je le remets où il faut).
Le problème c´est que si PositionJoueurPrecedent était exactement sur la ligne de détection de collision, la collision n´est pas détectée (je sais pas si je suis clair là). Pour comprendre, le mieux c´est d´essayer.
Aux lignes 359 et 360, si vous remplacez la valeur 9.79 par 9.8, la collision n´est pas détectée. La raison : PositionJoueurPrecedent.z vaut toujours à un moment ou à un autre exactement 9.8. Dans ce cas, j´ai réussi à contourner le problème.
Maintenant, à la ligne 366 j´ai une détection de collision qui concerne le dessus du plan incliné (en gros, le joueur doit monter lorsqu´il avance sur le plan incliné. Et là, ça pose problème. Le joueurs doit s´y prendre à plusieurs reprise avant d´arriver en haut du plan incliné car il passe régulièrement à travers.
J´ai bien essayé de résoudre ce problème mais je n´arrive à rien.
Quelqu´un aurait-il su solution ?
Par avance merci.
PS : pour l´instant je ne gère volontairement pas la gravité (une fois que le joueur est remonté, il ne peut plus redescendre). Je préfères ne pas tout mélanger et régler les problèmes un par un.