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

  FORUM HardWare.fr
  Programmation
  Algo

  Moteur "physique" de flipper 2D

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Moteur "physique" de flipper 2D

n°1431578
getget
Il y en a qui ont essayé ...
Posté le 25-08-2006 à 18:48:15  profilanswer
 

Bonjour, j'essaye de faire un flipper sur DS (en C)n mais j'ai un problème dans mes detections de collisions ...

 

Actuellement, voici comment je fais :

 

J'ai un sprite de 16x16 pixels qui représente ma bille.
J'ai un tableau de 256 x 192 (résolution de l'ecran) qui me sert pour les tests de collisions. La valeur 1 provoque une collision, la valeur 0 non.

 

Chaque cycle, je teste 16 points autour du centre de ma bille dans le tableau. Je fais la moyenne des coordonnées de tous les points dont la valeur renvoyée est 1. Cela me permet de savoir quel endroit de la bille est entré en collision.

 

Grace à cela, je peux calculer l'angle que fait la normale à la surface de contact avec l'horizontale, et calculer le rebond en faisant des sin et des cos.

 

Jusque là, tout marche SAUF 2 points :

 

La bille rebondit toujours sur la surface, alors que dans un vrai flipper elle roule plutot :/
Parfois, si la bille va trop vite, la collision se detecte mal (la bille est trop entrée dans la surface :/)

 

Avez vous une idée d'une autre facon de faire ??


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
mood
Publicité
Posté le 25-08-2006 à 18:48:15  profilanswer
 

n°1432816
GroXx
Posté le 29-08-2006 à 00:18:41  profilanswer
 

Salut, pour le problème de vitesse de la bille, tu devrai peut-être faire varier la distance des points de détection de collision par rapport au centre de la bille en fonction de sa vitesse.
 
De même, la vitesse influe sur le rebond. si la bille arrive avec une vitesse élevée, elle va avoir tendance à rebondir fortement. Dans la cas contraire, elle va rebondir de manière négligeable, et suivre la surface a cause de la gravité.
 
Au fait tu gères l'inclinaison du flipper?


Message édité par GroXx le 29-08-2006 à 00:19:50
n°1432829
bjone
Insert booze to continue
Posté le 29-08-2006 à 02:00:15  profilanswer
 

pour la pénétration, tu prends la position précédente et la nouvelle position et tu fais une dichotomie:  
si nouvelle position a trop pénétré, on prends le point milieu, si le point le milieu a trop pénétré on prends le 1/4 sinon on prends les 3/4 du vecteur ppos->npos, etc... itérativement. (forcément là ça merde si la position précédente n'est pas "safe" )
 
a toi de bien définir ce qu'est la collision "nette" et la pénétration (nécessitant une entrée en itération par dichotomie).
 
il serait aussi judicieux de travailler en virgule fixe ou flottante pour les coordonnées de la boule ainsi que son vecteur vitesse, et a l'affichage & test bitmap tu arrondis les coordonnées au pixel le plus proche.
 
ton contour de flipper, est-il "nuageux" ou peut-il être modélisé par des segments de droites, cercles/disques pour faire une détection mathématique plustôt qu'au niveau pixel ? (j'ai peur qu'avec une boule de 16x16, le comportement soit rapidement vilainement instable dû aux "points de collisions" possibles alignés sur cette faible résolution)
 
de plus tu pourrais coller des matériaux a tes segments/disques pour définir le rebond, l'effet, etc...

Message cité 1 fois
Message édité par bjone le 29-08-2006 à 02:03:06
n°1432831
bjone
Insert booze to continue
Posté le 29-08-2006 à 02:14:52  profilanswer
 

en fait ouais, je pense que le mieux serait de faire toute la méca en virgule flottante et d'avoir une réprésentation géométrique math en plus du bitmap.

n°1432833
getget
Il y en a qui ont essayé ...
Posté le 29-08-2006 à 02:20:46  profilanswer
 

Pour le moment, c'est tout en virgule flotante, mais j'ai mit le projet en veille, justement pour les problemes que tu cites (amortissemrnt différent selon le materiau, problemes d'instabilité ...), je verrai quand j'aurai fini mon autre projet en cours, bien plus simple :)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
n°1451970
WhitePoney
Moi ! Moi m'sieur !
Posté le 04-10-2006 à 11:01:54  profilanswer
 

Salut  :hello:  
 
Je travaille aussi sur un truc similaire.
 

bjone a écrit :

pour la pénétration, tu prends la position précédente et la nouvelle position et tu fais une dichotomie:  
si nouvelle position a trop pénétré, on prends le point milieu, si le point le milieu a trop pénétré on prends le 1/4 sinon on prends les 3/4 du vecteur ppos->npos, etc... itérativement. (forcément là ça merde si la position précédente n'est pas "safe" )


 
 
Le problème c'est qu'on "active" l'interpollation de collision lorsque qu'on détecte que l'objet sera en collision à sa prochaine position, or si la distance parcourue est trop grande il y a risque de "dépasser" intégralement une surface fine de collision et donc la fonction de collision n'est pas activée. Je sais pas si je suis clair  :p  
 
Le top ce serai de systématiquement découper la distance parcourue en petits bouts et pour chaque bout faire une détection de collision, mais c'est au détriment des perfs :(
 
 
Actuellement j'ai le problème où la surface de rebond peut changer de forme, et donc il faut déterminer la normale en fonction des pixels voisins. Je compte faire comme tu as fait getget, mais c'est un peu bourrin comme méthode :D


Message édité par WhitePoney le 04-10-2006 à 11:02:47

---------------
>>> www.gamewarp.net <<< Toute l'actualité du jeu vidéo au quotidien :) >>> www.generateur35.com <<< Tous les générateurs du Web :D
n°1452082
bjone
Insert booze to continue
Posté le 04-10-2006 à 13:52:53  profilanswer
 

tout à fait pour l'histoire de la distance, le mieux est de soit faire des étapes intérmédiares, soit d'envelopper la trajectoire de la bille avec une bounding box (ou plustôt un truc avec des arrondis a chaque bout, donc l'eveloppe serait un segment associé avec un rayon).
 
ta surface de rebond qui change, c'est quoi une animation bitmap ? ou un élement bitmap que tu fais tourner ?

n°1452249
spotaszn
Posté le 04-10-2006 à 15:59:54  profilanswer
 

Pour le problème de collision, je pense aussi que tu aurais tout à gagner à faire du temps continu ou de t'en approcher avec des "space-time volumes" (volumes englobants entre deux étapes), comme proposé par bjone. Le "temps discret" (pas à pas), ce n'est pas adapté à un flipper ou bien avec des tas de contraintes sur les "time step", les vitesses, l'épaisseur des obstacles, etc. Bref, on évite !
 
Par contre, pour ton histoire de surface qui peut changer de forme, une représentation des surfaces de collision par des polygônes ou des courbes de béziers serait bien plus appropriée et l'interpolation de la normale au point de collision serait bien plus précis.

n°1452516
WhitePoney
Moi ! Moi m'sieur !
Posté le 04-10-2006 à 22:56:31  profilanswer
 

Vous pouvez expliquer un peu la tehnique du "space-time volumes", je ne vois pas trop comment l'utiliser...
 
Ma représentation des surfaces est pour l'instant une simple matrice avec des 0 ou 1 suivant s'il y a qqchose ou non. Cette surface se déforme lorsque des objets tappent dessus, en gros les 1 deviennent des 0, la surface n'est plus plane pour un deuxième objet qui collisionnerait au même endroit.
 
Je ne vois pas trop comment utiliser une surface polygone ; ça signifie qu'il faut à chaque "tour" vérifier que le segment trajectoire ne coupe pas chaque segment des polygones présents non ?


---------------
>>> www.gamewarp.net <<< Toute l'actualité du jeu vidéo au quotidien :) >>> www.generateur35.com <<< Tous les générateurs du Web :D
n°1452543
spotaszn
Posté le 04-10-2006 à 23:54:49  profilanswer
 

Les "space-time volumes" : dans le cas d'une boule qui passe d'un point A à un point B durant un "time step", cela revient à considérer non pas la boule au temps A puis la boule au temps B mais une "capsule" (cylindre aux extrémités arrondies) composée de l'union de la boule en A, la boule en B et le cylindre du même diamètre que la boule et d'axe le segment [AB]. En gros, on en revient à considérer un volume dans lequel on est sûr de trouver l'objet durant une période de temps donnée. Les intersections deviennent alors des intersections capsule/décor et non boule/décor. Je parle en termes de volumes, en 2D, cela devient des surfaces...  
 
Pour ta représentation du "décor"... Plusieurs personnes t'ont signifié que l'utilisation d'un bitmap pour de la physique n'est pas judicieuce... Il est très facile d'altérer des polygônes après chaque collisions... Un partitionnement de l'espace (du plan, plutôt) pourra t'aider si tu trouves qu'il y a trop de segments à tester à chaque frame. Je te suggère un QuadTree... Un BSP dans sa version plan pourrait aussi être pertinent si tu as des portions de décor non déformables...


Message édité par spotaszn le 04-10-2006 à 23:57:30
mood
Publicité
Posté le 04-10-2006 à 23:54:49  profilanswer
 

n°1452592
WhitePoney
Moi ! Moi m'sieur !
Posté le 05-10-2006 à 09:13:15  profilanswer
 

Ha ok, je vois  :jap:  
 
Merci pour ces explications, je vais tâcher d'implémenter ça dans mon application  :) .


---------------
>>> www.gamewarp.net <<< Toute l'actualité du jeu vidéo au quotidien :) >>> www.generateur35.com <<< Tous les générateurs du Web :D

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

  Moteur "physique" de flipper 2D

 

Sujets relatifs
quel moteur 3D simple en java ?Moteur interne:: que choisir
moteur de rechercheVos avis pour un moteur de recherche.
[PHP / MySQL] Moteur de recherchelexique français/anglais + moteur de recherche
[Java] Moteur de blog en java - quelle archi ?Moteur de recherche dans BD
Moteur de recherche dans zipCréer un moteur de recherche !
Plus de sujets relatifs à : Moteur "physique" de flipper 2D


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)