Jump to content
Jagware
Sign in to follow this  
GT Turbo

A propos des collisions de sprites

Recommended Posts

GT Turbo    5

Sur la Jag on a tout pour ètre heureux sauf.........pour les collisions de sprites, donc j'aimerais savoir si certains y ont déjà pensé. Comme technique on aurait :

 

 

 

- Bouding boxes (Tester des cubes)

 

- Bouding circles (Vérifier sur un cercle)

 

 

 

Quelqu'un a autre chose ?

 

 

 

GT Turbo :blush:

Share this post


Link to post
Share on other sites
SCPCD    0

Ptet avec le blitter ?

 

En faisant un mask et en lui faisant tester pixel par pixel ?

Share this post


Link to post
Share on other sites
GT Turbo    5
SCPCD :


Ptet avec le blitter ?

En faisant un mask et en lui faisant tester pixel par pixel ?





J'avais pensé a voir pour adapter la routine de P. Mandin, mais je trouvais cela délirant de devoir 'fabriquer' un mask pour faire les tests !! C'est vrai que l'avantage de cette routine, c'est le test au pixel près, mais faut voir suivant les cas, on va perdre du temps machine a faire les masques. Sinon faudrait fabriqué les masques durant l'init du jeu, faut voir avec la ram dispo, moi qui reve depuis longtemps de faire des gros gros sprites !!



GT Turbo ;)

Share this post


Link to post
Share on other sites
SCPCD    0

Sinon, il y a ptet moyen (mais compliqué) en couplant le GPU avec le OP (verification de ce qu'il fait dans la Line Buffer a des moments stratégiques ?)

Share this post


Link to post
Share on other sites
GT Turbo    5
SCPCD :


Sinon, il y a ptet moyen (mais compliqué) en couplant le GPU avec le OP (verification de ce qu'il fait dans la Line Buffer a des moments stratégiques ?)





Idee super bonne, mais j'ai peur d'un truc, on va perdre un certain temps a faire du scan sur la line buffer, surtout qu'il faut le faire ultra vite, pas qu'on se retrouve avec la prochaien ligne alors qu'on a pas fini de tester la notre !!



Balancé les idées, on fera un tri un peu plus tard



GT Turbo

Share this post


Link to post
Share on other sites
SCPCD    0

Tu peux utiliser les objets GPU dans la liste des objets a des endroits strategiques (qui lancent une interruptions au GPU) comme sa tu peux deja savoir un peu plus précisement ce qui a dans la Line Buffer...

 

En plus, dans la Technical Reference Manual de Tom & Jerry, dans la section LBUFF ils disent qu'il y a une zone adressable en 32bits pour justement que le GPU puisse aider le pross d'objet a faire du traitement sur l'affichage.

 

De plus, c'est du double buffer donc un sur la ligne en cours et l'autre sur la ligne precedente : comme sa, tu peux toujours verifier sur la ligne precedente alors que l'OP travaille sur la ligne suivante.

 

 

 

Mais il faut donc faire un code vraiment hyper rapide comme tu dis ;)

Share this post


Link to post
Share on other sites
GT Turbo    5

Pour tous les cas de figures, ca serait bete de se retrouver bloquer pour des questions de collisions maintenant qu'on a pratiquement tout.

 

 

 

GT Pour lister les idées ! ;)

Share this post


Link to post
Share on other sites
SCPCD    0

Et avec les splines ?

 

 

 

Comme sa on prend des points particuliers des objets et la spline represente l'approximation de la forme de l'objet.

 

Il suffit alors de verifier si il y a intersection des splines des objets et le tours est joué.

 

 

 

Il faut prendre les splines les plus simples : les splines cubiques normalisées relaxées qui ce calcul facilement. On les calcul au chargement par exemple et voila !

 

 

 

ensuite, il suffit de faire une premiere verification pour pouvoir choisir les bonnes parties des splines a tester et ensuite on verifi si il y a intersection ou non.

 

 

 

L'avantage c'est qu'avec tous les types de prog 2D sa fonctionne.

Share this post


Link to post
Share on other sites
Azrael    0

C'est une idée. Tu es prêt à chercher les racines de polynômes du troisième degré définis par morceaux ?

 

 

 

Je préfère pour ma part la technique :

 

- on cherche l'intersection de boites englobantes

 

- s'il y a intersection, alors on teste la collision avec des masques

Share this post


Link to post
Share on other sites
SCPCD    0

:wacko:

 

Citation

 

Tu es prêt à chercher les racines de polynômes du troisième degré définis par morceaux ?

 

 

J'ai oublié ce point.....:wacko:

Share this post


Link to post
Share on other sites
GT Turbo    5

En train d'écrire la gestion de liste au Gpu, je me suis apercu que je pouvais intégrer la routine de collision directement dedans, vu que pour chaque objet, dans la description on possède sa position et sa taille, après il n'y aurait plus qu'a tester si intersection, si oui 'XOR ER' les masques et voir le résultat, il ne reste plus qu'a generer les masques, la génération doit pouvoir se faire en automatique, histoire de pas se prendre la tete, je recoderais surement les masques true color en bit, cela permet de diviser par 16 la taille par rapport au sprite (1 bit=1 pixel) et pour faire le 'XOR' cela accellera aussi le traitement.

 

 

 

GT Turbo ;)

Share this post


Link to post
Share on other sites
GT Turbo    5

Traduction pour ceux qui ont pas bac+12, l'opération consiste juste a faire une opération logique entre les masques (Sprite en deux couleurs, noir et blanc ou noir et une couleur pour les points), le résultat de cette opération donne 0 si les sprites se touchent pas et 1 si ils se touchent (Voir sur le site de Patrice Mandin), si mes souvenirs sont bons il explique le principe en plus détaillé. L'avantage que cela permet c'est du test de sprite au pixel près, plus de 'P...... de jeu de m...... j'ai explosé et pourtant le tir est passé a coté '

 

 

 

 

 

GT Turbo ;)

Share this post


Link to post
Share on other sites
SebRmv    2

Salut,

 

avec GT, on va bientôt rendre disponible la routine de collision "au pixel près" écrite au GPU. Elle marche pour les sprites 16 bits mais ne gère pas les champs PITCH ou REFLECT. La méthode utilisée est inspirée de l'idée de Patrice Mandin sauf qu'elle ne construit pas de masque explicitement :yes:.

 

Cela dit, je suis persuadé qu'on peut faire une routine plus générale au blitter qui marcherait dans tous les cas de figure (1 bit -> 32 bits, avec gestion de PITCH et FIRSTPIX). L'idée serait de faire générer au blitter le masque (avec un des deux modes de comparaison du blitter). Ensuite, on pourrait probablement refaire le même genre de trucs avec le deuxième sprite mais cette fois en utilisant le mode "collision detection" (qui porte surement bien son nom :D )

Bon, je ne sais pas si on gagnerait en vitesse par contre, et je ne sais pas non plus si ça serait utile en pratique d'avoir la routine "la plus générale" possible.

 

Et puis bon, 'faut comprendre notre ami le blitter avant ça :wacko: .

 

Seb

Share this post


Link to post
Share on other sites
GT Turbo    5

Je fais tourner mon code, et pourrait enfin faire le dernier test de ton code SebRmv ;)

 

 

 

GT Testeur :P

Share this post


Link to post
Share on other sites
GT Turbo    5

Les collisions de sprite sur Jag, une galère ? Et bien fini les galères pour les colisions, bien parce que vous le valez bien, avec SebRmv vu qu'on s'ennuyait, on vous a concocté une routine super sympa, qui fait du test de colision au pixel près ! Et oui fini les 'pourtant je l'ais pas touché !'. Combien de fois avez vous déjà criés cela en jouant, n'est ce pas ! Enfin bon voila c'est une histoire passé, au passage un merci a Mandin Patrice pour l'idée :) (Au passage c'est du code Gpu)

 

Allez y de bon coeur : COLISION.ZIP

 

 

SebRmv et GT :hug:

Share this post


Link to post
Share on other sites
GT Turbo    5
Et le clipping façon BLITTER, quelqu'un a testé ?

 

 

Tu veux parler du registre de colision du blitter ? Si c'est cela je crois bien que SebRmv a une petite idée dessus :yes:

 

 

GT B)

Share this post


Link to post
Share on other sites
SebRmv    2
Tu veux parler du registre de colision du blitter ? Si c'est cela je crois bien que SebRmv a une petite idée dessus :yes:

GT B)

 

oh là, t'emballe pas GT

c'est clair que ça doit être possible

mais j'ai pas encore d'idées claires

sur la chose :huh:

 

Seb

Share this post


Link to post
Share on other sites
GT Turbo    5
oh là, t'emballe pas GT

c'est clair que ça doit être possible

 

Je m'emballes pas, je voulais juste dire que tu y avais un peu pensé, mais la je vous avoues que je serais super curieux si quelqu'un arrivait a faire quelques chose avec le blitter, pour les colisions

 

 

GT Très curieux ;)

Share this post


Link to post
Share on other sites
SebRmv    2
Je m'emballes pas, je voulais juste dire que tu y avais un peu pensé, mais la je vous avoues que je serais super curieux si quelqu'un arrivait a faire quelques chose avec le blitter, pour les colisions

GT Très curieux ;)

 

bon, c'est bon alors :D

moi aussi, j'aimerais bien la pondre cette routine au blitter!!

 

Seb

Share this post


Link to post
Share on other sites
GT Turbo    5

La première analyse vite fait avant de m'endormir me fait encore (et toujours) demander si c'est possible du moins rapidement, car :

 

- Pour que le blitter puisse tester cela, nous avons a parcourir une source (On va dire que c'est le premier sprite a tester) et a écrire sur une destination (on va dire le second sprite a tester) pour faire le test donc, deux choses apparaissent :

 

- il va falloir faire une copie du second sprite quelque part pour éviter d'écraser notre second sprite

- le mode de colision n'est possible qu'en pixel mode le mode le plus lent du blitter

 

Ce qui indique a première vue une routine pas super rapide, non ?

 

GT :P

Share this post


Link to post
Share on other sites
SebRmv    2
La première analyse vite fait avant de m'endormir me fait encore (et toujours) demander si c'est possible du moins rapidement, car :

 

- Pour que le blitter puisse tester cela, nous avons a parcourir une source (On va dire que c'est le premier sprite a tester) et a écrire sur une destination (on va dire le second sprite a tester) pour faire le test donc, deux choses apparaissent :

 

- il va falloir faire une copie du second sprite quelque part pour éviter d'écraser notre second sprite

- le mode de colision n'est possible qu'en pixel mode le mode le plus lent du blitter

 

Ce qui indique a première vue une routine pas super rapide, non ?

 

GT :P

 

ouais, j'ai l'impression aussi qu'on n'y gagnera pas forcément...

 

Seb

Share this post


Link to post
Share on other sites
Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×