Bonjour,
je me permets de vous poser une question de débutant:
est-ce qu'il existe des masques dans processing?
Je voudrais afficher plusieurs zones d'animations différentes mais je n'y arrive pas.
J'ai bien essayé avec une image en png de la zone à masquer, mais ça ne fonctionne que pour une seule zone.
Merci d'avance si vous pouvez me guider…
Bonne journée,
JB
Hors ligne
genre des masques alpha ?
Hors ligne
genre j'ai un dessin sur toute la scène, mais je ne veux voir qu'une partie dans un rond au centre de la scène par exemple.
Donc ce cas de figure, j'y arrive en affichant par dessus le dessin, une image png avec un "trou".
Mais ce que je voudrais faire c'est un dessin avec juste une partie visible en haut à gauche par exemple, puis un autre dessin avec une partie visible en bas à droite etc.
Merci pour ton aide, j'espère que mes explications sont claires…
Hors ligne
Donc c'est bien un masque alpha
Pour ça tu crées un PGraphics contenant ton masque, puis tu applique un tonPImage.mask(tonPGraphics);
Dernière modification par cgiles (2012-08-17 12:27:56)
Hors ligne
Merci beaucoup pour ton aide!
J'ai testé avec 2 images, une pour chaque masque, et c'est exactement ce que je veux.
À un détails près… à la place des images, ce sont des animations que je voudrais masquer.
C'est à dire que je code une petite anim dans le draw(), et c'est cette anim que je voudrais masquer en partie.
Du coup j'ai tenté un this.mask(masque) en croisant les doigts très fort mais bien sûr…
De plus mes masques sont des formes complexes, du coup je me demande si il n'existe pas un moyen d'importer une image, et de dire, animation.mask(image)…
Hors ligne
ben tu appliques ton mask a l'ensemble des images de ton animation
Hors ligne
Ben j'ai essayé en faisant ça, mais ça marche pas…
PGraphics masque; ArrayList <pointBas> tousLesPointsBas; ArrayList <pointHaut> tousLesPointsHaut; float laDistance; void setup() { size(500, 500); background(255); smooth(); masque=createGraphics(width, height, P2D); masque.beginDraw(); masque.background(0); masque.ellipseMode(CENTER); masque.noStroke(); masque.fill(255); masque.ellipse(width/2, height/2, 100, 100); masque.endDraw(); tousLesPointsBas = new ArrayList<pointBas>(); tousLesPointsHaut = new ArrayList<pointHaut>(); for (int a=0; a<5; a++) { for (int b=0; b<10; b++) { pointBas pb = new pointBas(a*100+25, b*50); pb.mask(masque); tousLesPointsBas.add(pb); pointHaut ph = new pointHaut(a*100+75, b*50); ph.mask(masque); tousLesPointsHaut.add(ph); } } }
Hors ligne
la classe PGraphics ou la classe PImage ont une méthode mask(), là tu essaies de l'appliquer à une classe PointBas ou PointHaut...
faudrait voir ta classe
Hors ligne
voici mes classes
class pointBas { float posX, posY; int vitesse = 2; pointBas(float x, float y) { posX = x; posY = y; point(posX, posY); } void bouge() { posY+=vitesse; if (posY>=500) { posY = 0; } strokeWeight(3); stroke(0, 100); point(posX, posY); } } class pointHaut { float posX, posY; int vitesse = 2; pointHaut(float x, float y) { posX = x; posY = y; point(posX, posY); } void bouge() { posY-=vitesse; if (posY<=0) { posY = 500; } strokeWeight(3); stroke(0, 100); point(posX, posY); } }
Hors ligne
ah ben mince alors, j'ai 2 comptes…
Hors ligne
tu dois ajouter un PImage dans chacune de tes classes
que tu peux initialiser comme ceci :
PImage pict;
pointBas(float x, float y,string nomImage){
pict=loadImage(nomImage);
(...)
}
ensuite tu ajoutes une méthode mask a tes classes
void mask(PGraphics masque){
pict.mask(masque)
}
Hors ligne
Je ne comprends pas bien, tu me proposes de charger une image et de la masquer, c'est ça?
Mais moi c'est pas une image que je veux masquer, ce sont mes pointBas et mes pointHaut.
Hors ligne
Alors tu calcules la position de tes points par rapport au forme de tes masques, et si ils sont dedans tu les masques ou les affichent
regardes les examples de bouton dans les exemples fournis avec processing, tu trouveras comment savoir si quelque chose est dans un cercle ou non
Hors ligne
Je vais regarder ça parce que ça m'intéresse, mais ça ne marche pas pour des formes complexes, si?
À moins bien-sûr de faire des calculs savants j'imagine.
Ça n'est pas possible de charger une forme vectorielle et de s'en servir de masque?
Hors ligne
en récupérrant le tableau de pixel du masque et en testant si le pixel est noir ou blanc
http://processing.org/reference/pixels.html
http://processing.org/reference/PImage_loadPixels_.html
Hors ligne