begin process at 2012 05 29 00:26:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Collision pixel perfect


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Collision pixel perfect

lundi 20 novembre 2006 à 20:48:27 | Collision pixel perfect

UltimAKnighT

Bonjour,
Savez-vous où je pourrais trouver de la documentation là-dessus(en français de préférence) car j'ai eu beau chercher, les tutos sur lesquels je suis tombés n'expliquaient pas clairement le principe et surtout le mécanisme de ce type de collision.
Ou alors, est ce que quelqu'un d'entre vous pourrait me l'expliquez, si bien sûr ça ne le gênes pas.

Merci.








                                                     UltimAKnighT.
lundi 20 novembre 2006 à 21:40:33 | Re : Collision pixel perfect

Galmiza

Ici apparement ;): http://www.games-creators.org/wiki/D%C3%A9tection_pixel-perfect_des_collisions_2D Bonne chance
mercredi 22 novembre 2006 à 18:51:11 | Re : Collision pixel perfect

UltimAKnighT

Merci de votre réponse. J'ai déjà été voir ce tuto auparavant, mais celui-ci ne m'avait pas satisfait, je n'ai pas réussi à cerner les explications, c'est pourquoi je cherche à obtenir un cours expliqué disons plus simplement, pour que je puisses comprendre le mieux possible.
mercredi 22 novembre 2006 à 19:48:46 | Re : Collision pixel perfect

Galmiza

Qu'est ce qui te tracasse ?
Le principe ?
L'algorithme ?
Le code en C ?
mercredi 22 novembre 2006 à 20:39:24 | Re : Collision pixel perfect

UltimAKnighT

Ben je pense avoir cerner un peu le principe ( si j'ai bien compris ça joue sur la transparence d'un pixel ou quelque chose dans le genre). Mais ce qui me tracasse vraiment c'est l'algorithme.
jeudi 23 novembre 2006 à 20:51:36 | Re : Collision pixel perfect
jeudi 23 novembre 2006 à 22:01:54 | Re : Collision pixel perfect

Galmiza

Salut,

Les ups ne fonctionnent pas comme sur les forums "ordinaires".
Par contre ca envoie un mail à ceux qui ont participé au topic ;).

Tu as deux rectangles qui sont en fait tes deux images.
Tu regardes si ces deux grands rectangles sont en contact.
si x_max de l'un est plus petit que x_min de l'autre etc...

Si ils sont en contact, tu procedes à l'analyse pixel par pixel.
La zone de contact est bien entendu un rectangle.

Tu boucles sur la surface de ce rectangle, pixel par pixel.
Pour chaque pixel (x,y), tu détermines les coordonnées des pixels correspondants sur les deux images (x1,y1) et (x2,y2).
Si le pixel en (x1,y1) sur l'image 1 est opaque ET le pixel (x2,y2) de l'image 2 est opaque, tu as collision.
Après tu peux colorier le pixel en rouge pour faire joli mais c'est accessoire.

A quel niveau est ton problème ?
vendredi 24 novembre 2006 à 19:16:45 | Re : Collision pixel perfect

UltimAKnighT

Désolé pour le derangement, je ne savais pour le up. Sinon j'ai quelques questions, comment sait-on si un pixel est opaque? et, une boucle de la surface demande beaucoup de ressources processeur (surtout si il y a plusieurs collisions en meme temps) il n'y aurais pas moyen de faire quelque chose de moins gourmand? Une derniere question, comment assigner à un pixel sur une image 1, un homologue sur l'image 2, car ce choix doit être fait pour chaque surfaces en contact, n'importe oû sur les deux images (rectangles). (je ne sais pas si j'ai été tres clair, si non fat le moi savoir). Merci.
vendredi 24 novembre 2006 à 19:36:47 | Re : Collision pixel perfect

Galmiza

Salut,

Un pixel est opaque si son canal alpha est nul (ou plein je ne sais plus).
Mais bon tu peux dire que 2 pixels sont en collision si la somme de leur canal alpha (0-255) est au dessous 128, ou leur produit est au dessous de 97... c'est arbitraire.

Regarde ce schéma:
http://galmiza.free.fr/FTP/collision_perfect.PNG

Dans ce cas, le rectangle a pour coordonnées haut gauche: (x2,y2), pour largeur L=(l1-(x2-x1)), pour hauteur H=(h1-(y2-y1)).
En faisant plusieurs dessins du même type tu trouveras les différentes configurations possibles.
Ensuite tu fais 2 for imbriqués:
for (i=0;i<L;i++)
 for (j=0;j<H;j++)
  // pixel de l'image 1 correspondant: ((x2-x1)+i, (y2-y1)+j)
  // pixel de l'image 2 correspondant: (x2+i, y2+j)

Evidemment il faut prendre en compte quelques cas mais ce n'est pas trop compliqué.

C'est très gourmand en ressource effectivement (c'est pour ca que je n'ai jamais envisagé de l'utiliser ;)).
Pour aller plus vite (beaucoup plus vite en fait), tu peux assimiler les images sur tes sprites à plusieurs rectanges.
Ainsi tu testes les collisions entre les rectangles sur tes images et pas les pixels.

vendredi 24 novembre 2006 à 20:06:36 | Re : Collision pixel perfect

UltimAKnighT

Hum je pense que je commence à comprendre. Quand tu dis "assimiler les images sur tes sprites à plusieurs rectanges", c'est à dire en gros que l'on coupe une image en bande c'est ça? Je définis mon idée général : Mon objectif est de créé un moteur physique, que je pourrais utilisé (ou d'autres personnes) pour faire des applis 2D necessitant une gestion des collisions.

1 2

Cette discussion est classée dans : pixel, collision, perfect


Répondre à ce message

Sujets en rapport avec ce message

Pixel Perfect [ par T_Mehdi ] salut a tous bon je suis entrain de realiser un moteur de jeu 2D complet et optimizé donc j'avait vollue inclure le teste de collision entre deux scri Impression d'un pixel avec borland 6 [ par geag17 ] J'arrive à imprimer un texte en définnissant le canevas de ma feuille mais je voudrait dessiner des éléments de la taille d'un pixel.En clair y a t'il Detection de collision C++ [ par handmousemaster ] Bonjour à tous, Dans le cadre d'un projet informatique, j'ai besoin de faire de la detection de collisions en C++. Cependant je veux la faire de mani Gif 32 bits par pixel [ par Rouliann ] Salut tout le monde! J'aimerais savoir comment on obtient des fichiers .gif avec 32 bits par pixel... Toutes celles que je fais avec The Gimp ne font Récupération d'une couleur d'un pixel d'un canevas [ par bretgod ] Bonjour, Je travaille sous Borland Builder C++, et je cherche à récupérer la valeur du dernier  pixel RGB (coin inférieur droit )d'un canvas(ou g insé collison 3D [ par cppdupdup34 ] voila j'ai un petit souci dans mes detections de collision.le test de collision entre un point et un pavé orienté n'importe comment dans l'espace s'ef Difficile de résumer... aidez moi SVP [ par supergrey ] Bonjour, voila mon probleme, je réalise un jeu avec DX9 et j'ai besoin d'y inclure un systeme pour enregister des videos des phase de jeu.J'ai donc pr (Problème spécial) Compter le nombre de pixel différent entre deux images [ par chuckboy ] Bonjour a tous , J'ai un petit probleme. Cette fonction vérifie pixel par pixel deux images et compte le nombre de pixel différent entre les deux , ca Recuperer la Couleur d'un Pixel dans une fenetre. [ par nomlingote ] Bonjour à tous, Est il possible de connaitre la couleur d'un pixel dans une fenetre (dont on connait le handle ) ou sur l'ensemble de l'ecran. J'ai es Bit par pixel [ par vangeurmasker ] Je cherche une fonction qui permette de me retourner le nombre de bit par pixel actuellement utilisé par windows (nombre de couleurs). Le but est de c


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales