Forums Développement Multimédia

Aller au contenu

Starling : Comment utiliser getVertexAlpha?

CODE Actionscript

4 réponses à ce sujet

#1 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 29 August 2013 - 00:36 AM

Bonjour a tous,

Afin de tester une collision "Pixel Perfect", je souhaite retrouver la valeur en alpha d'un pixel précis de mon objet.

Le soucis c'est que la fonction getVertexAlpha prend en valuer l'Id du vertex cible et que moi, je ne possède que les coordonnées en x et en y de ce dernier.

Y a-t-il un moyen de retrouver l'Id d'un pixel en fonction de sa position?

Merci !

#2 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 29 August 2013 - 04:56 AM

Hello !

Apriori, je dis bien apriori - comme tu sais, je n'utilise pas Starling donc... - getVertexAlpha ne sert pas à ça.

En fait, quand tu bosse avec le GPU, colorTransform n'existe pas mais tu peux appliquer un équivalent qui agit au niveau des Vertex.
Concretement, un Quad contient 4 vertex ; Avec le CPU on était obligé d'appliquer le ColorTransform sur tout le Quad, mais avec le GPU on pourrait mettre le coin en haut à gauche (par exemple) transparent, et uniquement celui la.

Bref, apriori get/setVertexAlpha sert à modifier le ColorTransform à l'échelle des Vertex plutot qu'à l'échelle des Quads


Citation

Y a-t-il un moyen de retrouver l'Id d'un pixel en fonction de sa position?
L'id d'un pixel ?

Sinon, d'après ce que je vois dans la doc, tu peux faire Atlas.hittest

Bon courage !

#3 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 29 August 2013 - 05:44 AM

Salut, merci pour ta réponse.

En fait dans la classe Image de starling, il y a une fonction "getVertexAlpha" et une fonction "getVertexColor" qui prennent toutes deux une variable "vertexId" de type int.

La doc donne : Returns the alpha value of a vertex at a certain index. J'imagine donc que si j'arrive a cibler le bon vertex, il me renvoie sa valeur d'alpha.

J'ai pensé que le vertexId en question aurait un rapport avec se position dans l'image (imaginons une image de 8x8, le premier pixel en haut a gauche aurait donc l'id 0 et le dernier en bas a droite l'id 63) mais ca n'a pas l'air de fonctionner

#4 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 29 August 2013 - 12:16 PM

non, tu n'as pas compris ce que je t'ai dit plus haut...

Un vertex = un point dans ta géométrie3D
Dans Starling, les élément 3D sont des Planes vu de haut.
Chaque plane (ou Quad si tu préfères) est construit a partir de 4 points, parce qu'un carré à toujours 4 coins (même s'il fait 2000x2000).

Ensuite, comme dit plus haut, les opérations équivalent au ColorTransform coté GPU ne s'appliquent pas par DisplayObject mais par vertex.

Les méthodes dont tu parles servent à gérer le ColorTransform (couleur et alpha) pour chaque vertex.
Essaye peut etre de dessiner un seul quad et d'appeler setVertexAlpha(0,0) pour rendre transparent un seul point du maillage. Normalement, l'un des coins de ton quad devrait tirer vers le transparent.

Par contre, j'ai vu qu'il y avait une fonction hittest dans la classe Atlas, et je pense que c'est ca que tu veux non ?

EDIT : et d'ailleurs, je suppose que c'est à ca que sert le bitmapData gardé en mémoire de la classe Atlas

#5 draad

  • Members
  • PipPipPipPipPipPipPipPip
  • 654 messages

Posté 29 August 2013 - 19:20 PM

Haaaa d'accord, je comprends mieu.

Je vais donc me pencher sur cette piste de la classe Atlas, merci pour ta patience.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)