2
5
13
18
Dessiner
5 L'espace de dessin
6 Les formes
7 Les couleurs
8 Le texte
24
27
33
37
Dessiner plus
9 Les images
10 Les styles de bordures
11 La typographie
12 Les transformations
40
50
52
58
Programmer
13 Les variables
14 Les conditions
15 Les rptitions
16 Les listes
17 Les mthodes
18 Les objets
19 Les commentaires
69
72
75
79
88
96
101
Animer
20 La mthode draw
21 La ligne de temps
22 L'animation d'un objet
23 L'animation de plusieurs objets
24 La lecture du son
104
110
114
119
124
Sortir
25 L'exportation
26 L'impression
27 La vido
133
136
141
Interagir
28 Les vnements clavier
29 Les vnements souris
30 L'entre Microphone
31 L'entre vido
145
149
155
160
Annexes
32 Les astuces
33 Les erreurs courantes
34 Les librairies externes
35 La documentation en ligne
36 Processing dans l'enseignement
37 Arduino
38 A propos de ce manuel
39 Glossaire
164
168
171
175
177
180
187
190
PRSENTATION
Introduction
Conu par des artistes, pour des artistes, Processing est un des
principaux environnements de cration utilisant le code informatique
pour gnrer des uvres multimdias sur ordinateur. L'attrait de ce
logiciel rside dans sa simplicit d'utilisation et dans la diversit de
ses applications : image, son, applications sur Internet et sur
tlphones mobiles, conception d'objets lectroniques interactifs.
Processing
fdre une forte communaut d'utilisateurs
professionnels et amateurs : artistes, graphistes, vidastes,
typographes, architectes, web designers et designers en gnral. Il
est galement utilis par des enseignants en arts qui souhaitent
familiariser leurs tudiants avec les potentialits artistiques de la
programmation, les concepteurs du logiciel l'ayant pens ds
l'origine comme un outil d'apprentissage.
Un peu d'histoire
Processing a t conu au laboratoire Aesthetics + Computation
Group (ACG) du MIT Media Lab par Ben Fry et Casey Reas en 2001.
Ce logiciel est plus ou moins le prolongement du projet Design By
Numbers, cr par le directeur du laboratoire, l'artiste-programmeur
John Maeda. Dans son livre prsentant le langage de
programmation qu'il a conu, Maeda met en avant la simplicit et
lconomie d'action dans la programmation dimages.
Plusieurs lments de ce premier projet sont visibles dans
lenvironnement Processing : la simplicit de linterface du logiciel,
la priorit donne lexprimentation et lapprentissage, ainsi que
les nombreuses fonctions que les deux environnements partagent.
Les concepteurs de Processing ne cachent pas cet hritage.
La version actuelle de Processing est la version 1.2.1. Les exemples
donns dans ce manuel font rfrence cette version du logiciel.
Exemples d'utilisation
Logiciel de cration multimdia, Processing permet de dessiner,
raliser des animations en 2 ou 3 dimensions, crer des uvres
sonores et visuelles, concevoir des objets lectroniques qui
interagissent avec leur environnement. Des dizaines de milliers
d'artistes, de designers, d'architectes, de chercheurs et mme
d'entreprises l'utilisent pour raliser des projets incroyables dans de
multiples domaines :
publicits, gnriques de lms, vidos clips, dessins
anims, Processing permettant de crer des eets visuels
originaux ;
visualisation de donnes scientiques sous la forme
d'images xes ou animes, facilitant ainsi la reprsentation
d'informations complexes dans de multiples secteurs
professionnels (environnement, transports, conomie,
sciences humaines, etc.) ;
production musicale, Processing permettant non
seulement de lire mais aussi de transformer et de crer du
son ;
spectacle vivant, grce aux nombreuses fonctions
d'interaction oertes par Processing, il est possible de crer
des performances de VJing, utiliser le mouvement des
danseurs pour gnrer en temps rel des eets sonores et
visuels dans un spectacle, raliser des uvres d'arts
numriques interactives ;
Architecture, Processing facilitant la reprsentation
spatiale, il est utilis dans des projets d'architecture pour
automatiser le dessin de constructions en 2 ou 3
dimensions.
La suite de ce chapitre va vous prsenter quelques exemples de
travaux raliss avec l'aide de Processing dans diffrents contextes.
Mycelium
Ryan
Alexander
NYTimes 365/360
Shadow Monsters
Platonic Solids
: http://www.michael-
Champ d'Ozone
par
HeHe:
Body navigation
10
okdeluxe
Londres:
Flight 404
11
Motifs gnratifs
[Image 600 de large maximum au format png]
T ravaux de Andras Gysin.
Les images des ralisations prsentes dans ce chapitre sont la
proprit de leurs auteurs respectifs.
12
L'installation de Processing
Processing tant crit en Java, il fonctionne en principe sous toute
plate-forme supportant au moins la version 5 (galement appele
1.5) de ce langage. Les plates-formes les mieux supportes sont
nanmoins Microsoft Windows (Windows XP et Windows 7),
GNU/Linux et Mac OS X.
L'installation proprement dite de Processing est assez simple et
dpend de la plate-forme que vous utilisez. Dans tous les cas, allez
sur la page de tlchargement http://processing.org/download/ et
cliquez sur le nom de votre plate-forme.
Sous Windows
Pour Windows, il est prfrable de ne pas utiliser l'option Without
JAVA qui ncessitera d'installer sparment Java. En cliquant sur
Windows dans la page de tlchargement du site de Processing,
vous allez tlcharger une archive processing-xxx.zip . Une fois le
tlchargement achev, dcompressez l'archive et placez le dossier
Processing extrait de l'archive dans le dossier C:\Program Files\.
Allez ensuite dans le dossier C:\Program Files\Processing et
excutez le fichier processing.exe en cliquant dessus.
Sous Mac OS X
La version Mac OS X est tlcharge sous la forme d'une image
disque (chier .dmg). Par dfaut ce chier s'ache sur le bureau et la
fentre de l'image disque s'ouvre automatiquement. Au sein de cette
fentre, il sut de prendre l'icne Processing et de la glisser sur
l'icne du dossier Applications.
13
Sous GNU/Linux
Aprs avoir cliqu sur Linux pour tlcharger le chier processingxxx.tgz correspondant cette plate-forme, il sut de suivre pas
pas la procdure d'installation dcrite ci-aprs.
14
Installer Processing
Pour installer Processing, en mode graphique, il sut de
se placer dans le dossier cr et d'effectuer un double clic.
Si par contre vous utilisez un terminal, saisissez la
commande :
cd /ho m e/Vo treD o ssierPerso nnel/Pro cessing-xxx/
15
Lancer Processing
Pour dmarrer le programme Processing dans le
terminal (en tant toujours dans le dossier du programme,
exemple /home/MonDossierPersonnel/processing-1.2.1/),
lancer la commande :
./p ro cessing
Ensuite, il se peut que vous ayez changer la version de Java qui est
propose par dfaut. Pour vous en assurer, saisissez la commande
suivante :
sudo up date-alternatives --co nfig java
Chem in
Prio rit
------------------------------------------------------------
16
tat
* 0
1061
m o de
/usr/bin/gij-4.4
1044
m o de
1059
m o de
1061
m o de
/usr/lib/jvm /java-6-sun/jre/bin/java
63
m o de
auto m atique
1
m anuel
2
m anuel
3
m anuel
4
m anuel
Ap p uyez sur <Entre> p o ur co nserver la valeur p ar dfaut[*] o u
cho isissez le num ro
slectio nn :
17
L'interface
L'interface d'utilisation de Processing est compose de deux fentres
distinctes : la fentre principale dans laquelle vous allez crer votre
projet et la fentre de visualisation dans laquelle vos crations
(dessins, animations, vidos) apparaissent.
On trouve plus prcisment les lments suivants dans l'interface :
1. Barre d'actions
2. Barre d'onglets
3. Zone d'dition (pour y saisir votre programme)
4. Console (destine aux tests et messages d'erreur)
5. Fentre de visualisation (espace de dessin)
6. Barre de menu (non reprsente sur la copie d'cran)
18
Barre d'actions
Bouton "Run" : excute votre sketch (votre programme).
19
Le dossier de travail
C'est le dossier dans lequel seront enregistrs les sketchs et les
librairies (des modules externes proposant des fonctionnalits
supplmentaires). Par dfaut ce dossier se nomme Processing et se
trouve dans Documents (sous Mac) ou Mes Documents (sous
Windows). Sous GNU/Linux, il est dans votre dossier personnel sous
le nom de sketchbook.
Pour modier ce dossier, allez dans le menu Files > Preferences. Dans
la bote de dialogue qui apparat, cliquez sur Browse (parcourir) pour
choisir le dossier qui vous convient.
20
Bases du langage
Processing utilise le langage Java pour crer vos programmes. Ce
langage, qui va tre lu par votre ordinateur aprs avoir cliqu sur le
bouton de lancement du sketch, possde un certain nombre de
rgles de syntaxe qui si elles ne sont pas respectes empcheront
l'excution correcte du programme. Il y a aussi un certain nombre
de concepts de base ncessaires connatre.
Majuscules et minuscules
Processing est sensible la casse, il fait la dirence entre les
majuscules et les minuscules : libre est diffrent de Libre !
Le point virgule
A la fin de chaque instruction (dessiner un cercle, effectuer un calcul,
etc.), vous devez mettre un ; an de signaler l'ordinateur la n
de l'instruction. Dans l'exemple ci-dessous, on utilise les caractres
// pour insrer un commentaire qui sera ignor lors de
l'excution (la prsence de commentaires dans votre programme
facilite sa comprhension ultrieure).
//D essine un cercle
ellip se(10,10, 10, 10);
//Cre une variable
int chiffre = 10 + 23;
Appels de mthodes
Processing propose un grand nombre de fonctionnalits prdnies
appeles mthodes : dessiner un rectangle, dnir une couleur,
calculer une racine carre, etc. Ces mthodes ont chacune un nom
spcique. Pour faire appel elles, il sut de taper leur nom en
respectant les majuscules et minuscules et de coller des
parenthses aprs le nom : parfois on doit prciser certaines valeurs
l'intrieur des parenthses (couleur, position, taille, etc.).
L'exemple ci-dessous affiche un cercle gris.
fill(128);
ellip se(50, 50, 60, 60);
21
p rintln(1000);
Oprations arithmtiques
Processing permet d'eectuer des calculs mathmatiques. Tout au
long de l'utilisation de cet environnement, vous serez amen
calculer des valeurs. Ne vous inquitez pas : l'ordinateur le fera pour
vous. Les oprations d'addition, soustraction, multiplication et
division peuvent tre combines. Il est galement possible d'utiliser
des parenthses pour dfinir l'ordre des oprations.
Attention aux nombres virgule ! Dans Processing, les units sont
spares des dcimales par un point et non par une virgule.
Voici quelques exemples d'oprations arithmtiques :
p rintln(10 + 5);
p rintln(10 + 5 * 3); // 5*3 (so it 15) p uis additio nne 10
p rintln((10 + 5) * 3); // 10+5 (so it 15) p uis m ultip lie 15 p ar 3
p rintln(10.4 + 9.2);
22
DESSINER
23
L'espace de dessin
L'espace de dessin constitue l'espace de reprsentation proprement
dit. Cette fentre de visualisation achera vos ralisations dans
Processing en 2 ou 3 dimensions.
Cet espace est cr par l'instruction size() qui prend deux
arguments : size(largeur,hauteur); .
Par exemple, dans la fentre d'dition du logiciel Processing,
saisissez la commande suivante :
24
25
26
Les formes
Beaucoup de formes prdnies sont fournies par Processing. En
voici les principales :
Le point
Pour commencer dessiner, nous allons partir d'un point. Sur
l'cran, un point est l'quivalent d'un pixel localis dans la fentre de
visualisation par deux axes de coordonnes, x et y correspondant
respectivement la largeur (axe horizontal) et la hauteur (axe
vertical) de l'espace de dessin. En suivant ce principe, la cration
d'un point dans Processing s'eectue l'aide de l'instruction
p o int(x,y) . Dans cet exemple, le point est trs petit. Il est plac au
centre de la fentre de visualisation.
p o int(50, 50);
La ligne
Par dnition, une ligne (AB) est constitue par une innit de points
entre un point de dpart A et un point d'arrive B. Pour la construire,
nous allons nous intresser uniquement aux coordonnes x et y de A
et de B. Ainsi, si par exemple dans la fentre par dfaut, le point A se
situe dans la rgion en bas gauche de votre fentre, et que le point
B se situe en haut droite, les instructions suivantes, peuvent
dessiner cette ligne sous la forme line(xA,yA,xB ,yB ) :
line(15, 90, 95, 10);
27
Le rectangle
Un rectangle se dessine par quatre valeurs en faisant l'appel de
rect(x,y,largeur,hauteur) . La premire paire de valeurs x et y , par dfaut
(mode CO RN ER) correspond au coin suprieur gauche du rectangle,
l'instar du point. En revanche la seconde paire de valeurs ne va pas
se rfrer la position du coin infrieur droit, mais la largeur (sur
laxe des x, horizontal) et la hauteur (sur laxe des y, vertical) de ce
rectangle.
Exemple :
rect(10, 10, 80, 80);
L'ellipse
Comme pour le rectangle, l'ellipse se construit sous les modes
CEN TER (par dfaut), et CO RN ER . Ainsi l'instruction suivante produit un
cercle dont les coordonnes du centre sont les deux premires
valeurs entre parenthses. La troisime valeur correspond la
grandeur du diamtre sur l'axe horizontal (x) et la quatrime la
grandeur du diamtre sur l'axe vertical : notez que si les 3e et 4e
valeurs sont identiques, on dessine un cercle et dans le cas
contraire, une ellipse quelconque :
ellip se(50, 50, 80, 80);
28
Le triangle
Le triangle est un plan constitu de trois points. L'invocation de
triangle(x1,y1,x2,y2,x3,y3) dfinit les trois points de ce triangle :
triangle(10, 90, 50, 10, 90, 90);
L'arc
Un arc ou section de cercle, peut se dessiner avec l'appel de arc(x, y,
largeur, hauteur, dbut, fin) , o la paire x, y dnit le centre du cercle,
la seconde paire ses dimensions et la troisime paire, le dbut et la
fin de l'angle d'arc en radians :
arc(50, 50, 90, 90, 0, PI);
Le quadrilatre
Le quadrilatre se construit en spciant quatre paires de
coordonnes x et y sous la forme quad(x1,y1,x2,y2,x3,y3,x4,y4) dans le
sens horaire :
quad(10, 10, 30, 15, 90, 80, 20, 80);
Courbe
Une courbe se dessine l'aide de curve(x1, y1, x2, y2, x3, y3, x4, y4) ,
o x1 et y1 dnissent le premier point de contrle, x4 et y4 le
second point de contrle , x2 et y2 le point de dpart de la courbe et
x3, y3 le point d'arrive de la courbe :
curve(0, 300, 10, 60, 90, 60, 200, 100);
29
Courbe Bzier
La
courbe
de
type
Bzier
se
construit
l'aide
de
bezier(x1,y1,x2,y2,x3,y3,x4,y4)
Courbe lisse
L'appel de curveVertex() dessine plusieurs paires de coordonnes x et
y, entre deux points de contrle, sous la forme curveVertex(p o int de
co ntr le initial,xN ,yN ,xN ,yN ,xN ,yN , p o int de co ntr le final) ce qui permet
de construire des courbes lisses :
beginShap e();
curveVertex(0, 100);
curveVertex(10, 90);
curveVertex(25, 70);
curveVertex(50, 10);
curveVertex(75, 70);
curveVertex(90, 90);
curveVertex(100, 100);
endShap e();
Formes libres
Plusieurs formes libres peuvent tre dessins par une succession de
points
en
utilisant
la
suite
d'instructions
beginShap e(),vertex(x,y),...,endShap e() . Chaque point se construit par ses
coordonnes x et y. La fonction CLO SE dans endShap e(CLO SE) indique que
la gure sera ferme, c'est--dire que le dernier point sera reli au
premier, comme dans l'exemple ci-dessous de dessin d'un
hexagone :
beginShap e();
vertex(50, 10);
vertex(85, 30);
30
vertex(85, 70);
vertex(50, 90);
vertex(15, 70);
vertex(15, 30);
endShap e(CLO SE);
Contours
Vous avez remarqu que jusqu' prsent, toutes les gures donnes
en exemple comportent un contour, ainsi qu'une surface de
remplissage. Si vous voulez rendre invisible le contour, utilisez
no Stro ke() en faisant bien attention de le placer avant la forme
dessiner :
no Stro ke();
quad(10, 10, 30, 15, 90, 80, 20, 80);
Remplissage
De la mme manire, il est possible de dessiner des formes sans
surface de remplissage avec l'instruction no Fill() :
no Fill();
quad(10, 10, 30, 15, 90, 80, 20, 80);
31
Primitives 3D
Les formes prdnies disponibles en 3 dimensions (primitives 3D)
peuvent tre ralises de manire simple en appelant size(x, y, P3D )
au dbut de notre sketch puis en employant en fonction de vos
besoins les instructions sp here(taille)
et bo x(lo ngueur, largeur,
p ro fo ndeur) . Il est galement possible de produire des eets
d'clairage sur nos formes tridimensionnelles l'aide de lights() .
La sphre
size(100, 100, P3D );
no Stro ke();
lights();
La bote
size(100, 100, P3D );
no Stro ke();
lights();
translate(50, 50, 0);
ro tateY(0.5);
bo x(40);
32
Les couleurs
Dessiner une image l'cran, c'est changer la couleur des pixels. Les
pixels sont des petites zones, le plus souvent carres, qui possdent
une couleur. Chaque couleur se dnit par trois canaux qui sont le
rouge, le vert et le bleu. Une valeur de 100% de chacun de ces trois
canaux donne du blanc. Une valeur de 0% de chacun de ces trois
canaux donne du noir. Il s'agit de lumire, et non de peinture. Ainsi,
plus la valeur de chaque canal sera importante, plus la couleur sera
lumineuse.
Par exemple, 100% de rouge, 80% de vert et 20% de bleu vont
donner ensemble la couleur orange. La mthode fill() nous permet
de spcier la couleur des prochaines formes dessiner. Chaque
canal d'une couleur peut tre donn sur une chelle de 0 255. Ainsi,
80% de 255 donne 204, et 20% de 255 donne 51.
La couleur de fond
On peut changer la couleur de fond en appelant la mthode
backgro und() . Attention : rajouter backgro und() la suite d'une
composition dj existante, l'effacerait !
backgro und(0, 0, 0);
La couleur de remplissage
A chaque fois que l'on dessine une forme, on le fait avec la couleur
de remplissage qui est choisie ce moment-l. On le fait en
appelant la mthode fill() .
no Stro ke();
fill(255, 204, 51);
rect(25, 25, 50, 50);
33
fill(127);
rect(25, 25, 50, 50);
La couleur du contour
Pour changer la couleur du contour des formes que l'on dessine, on
doit appeler la mthode stro ke() avec comme paramtres les canaux
de la couleur dsire. Appeler no Stro ke() dsactive la couleur de
contour. A titre d'illustration, voici un dessin de masque africain
utilisant ces deux instructions :
size(200, 200);
sm o o th();
backgro und(255); // o n dessine un fo nd blanc
stro ke(#000000); // le co nto ur sera no ir
34
fill(#FFCC66);
stro keWeight(3);
translate(width / 2, height / 2);
ellip se(0, 0, 100, 180); // fo rm e ellip tique du m asque
ellip se(0, 60, 20, 25); // ellip se de la bo uche
stro ke(255, 0, 0); // le co nto ur sera ro uge
ellip se(28, -30, 25, 10);
bezier(-30, -70, -5, -60, -5, 0, -5, 20); // co urbe du so urcil dro it
bezier(30, -70, 5, -60, 5, 0, 5, 20); // co urbe du so urcil gauche
line(-5, 20, 5, 20); // ligne du nez p o ur jo indre l'extrm it des
co urbes
size(100, 100);
backgro und(255);
stro ke(#000000);
fill(#FFFF00);
stro keWeight(1);
rect(10, 10, 10, 10);
p ushStyle(); // O n o uvre une p arenthse de style
stro ke(#FF0000);
fill(#00FF00);
stro keWeight(5);
rect(40, 40, 20, 20);
p o p Style(); // O n ferm e no tre p arenthse de style
rect(80, 80, 10, 10);
Exercice :
35
L'espace colorimtrique
Dnir des couleurs partir des canaux rouge, vert et bleu constitue
un moyen parmi d'autres de dcrire l'espace colorimtrique de votre
dessin. Processing supporte galement le mode T SV. T SV signie
teinte, saturation, valeur . En anglais, on appelle ce mode HSB,
pour hue, saturation, brightness . On choisit une chelle de 0
100 pour chacun de ces 3 canaux. La teinte correspond un chire
indiquant la position de la couleur sur l'chelle chromatique, soit un
arc-en-ciel. Le rouge est gauche, puis viens l'orange, le jaune, le
vert, le bleu et le violet.
La mthode co lo rM o de() est utile pour changer l'chelle numrique
que l'on utilise pour spcier les couleurs, et pour changer d'espace
colorimtrique. Par exemple, appeler co lo rM o de(RG B , 1.0) , va changer
l'chelle que l'on utilise pour spcifier chaque canal des couleurs afin
qu'il aille de zro un.
Ici, on change le mode de couleur pour le T SV an de crer un
dgrad de teinte qui ressemble aux couleurs d'un arc-en-ciel.
no Stro ke();
size(400, 128);
// La teinte sera sp cifie avec un chiffre de 0 400
co lo rM o de(HSB , 400, 100, 100);
// O n fait quatre cent rp titio ns
fo r (int i = 0; i < 400; i++) {
fill(i, 128, 128);
rect(i, 0, 1, 128);
}
36
Le texte
On va maintenant dessiner des caractres textuels qui s'acheront
dans la fentre de visualisation. Attention : crire dans l'espace de
dessin ne ressemble pas l'criture dans le sens classique du terme,
notamment comme dans un traitement de texte. Le texte dans
Processing ressemblerait plutt du grati urbain , c'est--dire
une sorte de peinture de caractres alphanumriques qui niront
tous par sempiler les uns sur les autres. C'est davantage un procd
typo-graphique qu'un travail d'criture, avec une insistance sur
l'aspect graphique des mots ou des lettres que nous allons dessiner.
Bonjour Processing !
Tout comme les formes prdnies, telles les lignes ou les ellipses,
il sut d'une seule instruction dans notre sketch pour dessiner du
texte. Ouvrez une nouvelle fentre d'dition, tapez la ligne suivante,
et excutez-la en cliquant sur le bouton run :
text("Salut!", 10, 20);
37
Empilement
Comme nous l'avons indiqu dans l'introduction de ce chapitre, les
mots s'inscrivent l'intrieur de la fentre de visualisation tel un
dessin et non pas tel un systme de traitement de texte. On ne peut
ni slectionner ni modier directement ce texte l'aide de la souris
ou du clavier. La seule modication qui peut tre applique s'eectue
au niveau de votre programme en prcisant l'aide d'instructions
appropries que vous souhaitez par la suite effacer compltement le
texte et d'crire par dessus.
Voici une illustration rapide de ce principe de superposition :
fill(0);
text("un m o t p eut", 10, 20);
text("en cacher", 10, 40);
fill(204);
rect(28,25,50,20);
fill(0);
text("un autre", 10, 60);
fill(255, 255, 255);
text("un autre", 11, 61);
38
DESSINER PLUS
39
Les images
Ce que nous appelons image dans Processing n'est en fait rien
d'autre qu'une collection de pixels, rassembls l'intrieur d'un
rectangle. Pour dessiner une image l'cran, nous devons donner
une couleur chacun des pixels d'un rectangle, puis donner la
position en {x,y} o nous voulons dessiner cette collection de pixels.
Il est aussi possible de modier la taille {largeur,hauteur} de notre
image, mme si ces dimensions ne correspondent pas la taille
originelle de l'image.
Formats d'image
Trois formats de chier d'image sont accepts dans Processing :
PNG, JPEG, ou GIF. Ceux qui ont de l'exprience dans la conception
de sites web devraient reconnatre ces trois formats, car ce sont les
plus rpandus sur la Toile. Chaque format utilise ses propres
mthodes de compression de l'image (rduction de la taille
mmoire de l'image occupe sur l'ordinateur), lui donnant la fois
des avantages et des dsavantages et que nous pouvons rsumer de
la manire suivante :
1. JPEG est souvent utilis pour compresser des images de
40
Glisser-dposer
Nous allons maintenant importer le chier de cette image dans
l'environnement Processing. Pour bien russir cette tape, nous
vous recommandons de sauvegarder d'abord votre sketch, de
prfrence dans le dossier processing qui devrait se trouver par
dfaut dans le dossier Documents ou Mes documents de votre
ordinateur.
Localisez maintenant votre chier d'image, et glissez-le directement
sur la fentre Processing :
41
C'est dans ce dossier data que nous devons placer en ralit toutes
les images dont nous voulons nous servir dans notre sketch. C'est
dans cet emplacement que doivent galement tre rangs les
autres fichiers mdias comme les polices ou les sons.
Pour accder rapidement ce dossier, an par exemple d'y placer de
nouveaux chiers d'images, il sut de slectionner, dans le menu
Sketch, l'option Show Sketch Folder. Cette option est galement
accessible via le raccourci Ctrl-k sur Windows et GNU/Linux ou
Cmd-k sur Mac :
42
Maintenant que nous avons plac une image dans notre dossier
data, nous pouvons dsormais nous en servir dans notre
programme.
size(500,400);
PIm age ile;
ile = lo adIm age("ile.jp g");
im age(ile,50,10);
D'abord nous avons donn notre espace de dessin une taille plus
grande que notre image, juste pour mieux comprendre comment
celle-ci peut tre positionne dans le sketch final.
Il y a trois tapes pour afficher une image dans Processing :
1. Crer une variable qui contiendra les donnes (en pixels)
de notre image.
2. Importer les pixels d'un fichier dans notre variable.
3. Dessiner les pixels de cette variable dans notre espace de
dessin.
43
Si notre programme n'est pas anim, comme c'est le cas ici, il y aura
juste une longue pause lorsque l'image se charge dans Processing.
44
Changer de taille
En ajoutant deux paramtres, nous pouvons changer la taille de
l'image. Cette taille peut tre plus petite ou plus grande que l'image
d'origine, et priori il n'y a pas vraiment de limite. Par contre, audel de la taille d'origine de l'image, Processing sera oblig
d'inventer des pixels en doublant les originaux, ce qui donnera un
eet pixelis. Cet eet n'est pas forcment indsirable, vous de
voir.
Pour changer la taille de l'image, il sut de rajouter deux
paramtres votre image, {largeur, hauteur}, ce qui nous amne 5
paramtres : {variableImage, x, y, largeur,hauteur}.
size(500,250);
PIm age ile;
ile = lo adIm age("ile.jp g");
im age(ile,10,10,20,15);
im age(ile,20,20,50,30);
im age(ile,45,45,100,75);
im age(ile,95,95,1000,750);
45
Notez que nous avons import qu'une seule fois l'image dans notre
variable ile et que celle-ci peut tre dornavant utilise pour le
restant de notre programme. Notez galement que nous avons
respect les proportions {x,y} de notre image dans le changement
de la taille, mais que celles-ci auraient pu prendre n'importe quelle
valeur, ce qui reviendrait tirer l'image sur un de ces deux axes.
46
Quel que soit le fond sur lequel elle sera place, cette image s'y
intgrera parfaitement parce qu'elle contient justement une couche
alpha dcrivant les parties transparentes et non transparentes du
carr de pixels qui la composent. Notez que les pixels autour de
Rousseau sont transparents, alors que son front et son cou sont
opaques.
N'hsitez pas copier cette image au format png sur votre
ordinateur depuis la version en ligne de ce manuel :
http://fr.flossmanuals.net/processing/, chapitre Les images (conue
partir d'une illustration mise disposition sur le site Commons de
Wikimedia, cette image est libre de droit).
Dans notre programme Processing, nous allons pouvoir constater
que les pixels situs autour du personnage sont eectivement
transparents en superposant l'image de Rousseau (au format png)
avec celle du paysage prcdemment utilise (au format jpg) :
47
size(400,300);
PIm age ile;
ile = lo adIm age("ile.jp g");
PIm age ro usseau;
ro usseau = lo adIm age("ro usseau.p ng");
im age(ile,0,0);
im age(ro usseau,20,20);
size(500,130);
PIm age ile;
48
T out comme les instructions fill() et stro ke() , l'instruction tint() peut
prendre une, deux, trois, ou quatre valeurs, selon ce que nous
voulons faire. En indiquant trois paramtres, par exemple, nous
pouvons augmenter/diminuer l'intensit de la couche rouge, vert,
o u bleu de notre image. En indiquant quatre paramtres, nous
pouvons augmenter/diminuer, en plus de ces trois couleurs, la
valeur de transparence/opacit de l'image.
49
smooth
La mthode sm o o th() permet d'activer le lissage des contours. Elle
permet d'viter l'eet d'escalier qui apparat sur les lignes
diagonales.
line(10, 0, 100, 90);
strokeWeight
La mthode stro keWeight() permet de varier l'paisseur d'une ligne ou
d'un contour.
line(10, 0, 100, 90); // Ligne de 1 p ixel d'p aisseur
stro keWeight(5); //O n dfinit l'p aisseur 5 p ixels
line(0, 10, 90, 100); // Ligne de 5 p ixels d'p aisseur
strokeCap
La mthode stro keCap () permet de dnir l'apparence des extrmits
d'une ligne. Cette mthode n'est pas utile pour les formes. Elle peut
avoir les valeurs SQ U ARE (extrmit carr), PRO JECT (extrmit avec 2
petits angles briss) ou RO U N D (extrmit arrondie). Par dfaut c'est le
mode RO U N D qui est utilis. Cette mthode ne fonctionne pas avec P3D
ou O p enG L .
stro keWeight(10); // O n dfinit l'p aisseur des traits 10 p ixels
stro keCap (RO U N D ); // extrm it arro ndie
line(20, 40, 60, 80);
50
strokeJoin
La mthode stro keJo in() permet de modier l'aspect des jointures.
Elle peut avoir les valeurs M ITER , B EVEL ou RO U N D . Par dfaut c'est le
mode M ITER qui est utilis. Cette mthode ne fonctionne pas avec P3D
ou O p enG L .
size(300, 100); // O n m o difie la taille du sketch
stro keWeight(10); // O n dfinit l'p aisseur 10 p ixels
stro keJo in(M ITER); // Jo inture carr
rect(20, 20, 60, 60);
stro keJo in(B EVEL); // Jo inture brise
rect(120, 20, 60, 60);
stro keJo in(RO U N D ); // Jo inture arro ndie
rect(220, 20, 60, 60);
51
La typographie
Ce chapitre va vous permettre de personnaliser l'usage des textes
dans Processing en utilisant des polices de caractres alternatives.
A priori nous devrions maintenant voir une fentre Create Font qui
permet de convertir quasiment n'importe quelle police de caractre
en une forme utilisable dans notre sketch. Cette police doit tre
installe au pralable dans notre ordinateur pour qu'elle apparaisse
dans cette liste.
52
53
54
Voici le code complet d'un programme simple qui runit toutes ces
tapes pour dessiner une phrase dans la fentre de visualisation. Par
tradition, nous allons faire nos premiers pas dans l'criture en
crivant Salut tout le monde ! .
size(500,150);
PFo nt p o lice;
p o lice = lo adFo nt("G eo rgia-Italic-48.vlw");
textFo nt(p o lice,48);
text("Salut to ut le m o nde !", 20, 75);
55
Point d'origine
Pour rendre plus clair le rapport entre la position {x,y} de notre
message et sa forme typographique, nous avons galement dessin
dans l'illustration ci-dessus une petite croix pour rendre plus
explicite la faon dont Processing positionne l'criture :
size(500,150);
PFo nt p o lice;
p o lice = lo adFo nt("G eo rgia-Italic-48.vlw");
textFo nt(p o lice);
text("Salut to ut le m o nde !", 20, 75);
// indiquer la p o sitio n d'o rigine du texte
stro ke(255,0,0);
line(15,70,25,80);
line(15,80,25,70);
56
textAlign(LEFT,CEN TER);
text("left+center", 250, 125);
57
Les transformations
Jusqu' prsent, nous avons dessin des formes dans la fentre de
notre application, en nous reprant toujours par rapport au coin
suprieur gauche de la fentre.
Grce aux transformations, il va tre possible de dplacer cette
origine, mais aussi de rednir l'orientation des axes et mme de
changer la graduation de ces axes (on parle de changement
d'chelle).
Par dfaut, lorsque l'on dessine une forme (dans notre exemple un
rectangle), Processing dfinit le repre suivant :
size(200, 200);
no Stro ke();
fill(0);
rect(0, 0, 100, 100);
Dplacer
Le changement de la position de l'origine se fait par la commande
translate(). Nous pouvons nous dplacer sur l'axe x
( horizontalement ) et sur l'axe y ( verticalement ) et nous
allons indiquer translate() de combien nous voulons nous
dplacer sur chacun des axes. Dans l'exemple suivant, nous
dplaons l'origine de notre repre de 50 pixels en x et de 50 pixels
en y. Notons que translate() va seulement aecter les formes
gomtriques qui sont dessines aprs cette instruction.
58
size(200, 200);
no Stro ke();
fill(0);
translate(50, 50);
rect(0, 0, 100, 100);
size(200,200);
// N o ir
fill(0);
translate(20,20);
rect(0,0,40,40);
// G ris
fill(128);
translate(60,60);
rect(0,0,40,40);
// B lanc
fill(255);
translate(60,60);
rect(0,0,40,40);
Tourner
Nous avons pu dplacer l'origine du repre de dessin. Nous allons
maintenant appliquer une rotation sur les axes de notre repre.
Grce la commande rotate(), les axes x et y peuvent changer
d'orientation. rotate() prend en paramtre un nombre qui va
reprsenter l'angle de rotation, c'est--dire de combien nos axes
vont tourner par rapport notre fentre. Des valeurs positives
indiquent une rotation dans le sens des aiguilles d'une montre.
59
size(200, 200);
no Stro ke();
60
fill(0);
ro tate(PI/4);
rect(0, 0, 100, 100);
size(200,200);
sm o o th();
translate(width/2, height/2);
fo r (int i=0;i<360;i+=30){
ro tate(radians(30));
quad(0, 0, 30, 15, 70, 60, 20, 60);
}
Mettre l'chelle
La mise l'chelle permet de redimensionner les objets par la
commande scale(). Cette fonction permet d'agrandir ou de diminuer
la taille des formes gomtriques. Elle accepte un ou deux
paramtres. Par exemple, scale(0.5) va diminuer de moiti la taille
des formes gomtriques tandis que scale(2.0) va la doubler, scale(1)
n'a aucun effet.
L'criture avec deux paramtres permet de dcoupler le
redimensionnement en x et en y. Par exemple, scale(0.5, 2.0) va
craser la forme sur les x de moiti tandis que sur les y sa taille sera
double.
size(200,200);
scale(1.5);
61
rect(0,0,100,100);
size(200,200);
scale(1.0,1.5);
rect(0,0,100,100);
size(200,200);
no Stro ke();
// N o ir
fill(0);
scale(1);
rect(0,0,200,200);
// G ris
fill(128);
scale(0.5);
rect(0,0,200,200);
// B lanc
fill(255);
scale(0.5);
rect(0,0,200,200);
62
size(200,200);
sm o o th();
fill(0);
translate(100,0);
ro tate(PI/5);
rect(0,0,100,100);
size(200,200);
sm o o th();
fill(0);
ro tate(PI/5);
translate(100,0);
rect(0,0,100,100);
63
rect(0,0,100,100);
size(200,200);
sm o o th();
rectM o de(CEN TER);
// Rep re au centre de l'cran
translate(width/2,height/2);
// Sauvegarde de A
p ushM atrix();
// Transfo rm atio n B
ro tate(PI/4);
// D essin du carr no ir
fill(0);
rect(0,0,120,120);
// Restauratio n A
// A ce p o int-l, no tre rep re revient au centre de l'cran
p o p M atrix();
// D essin du carr blanc qui ne tient p as co m p te de la ro tatio n
fill(255);
rect(0,0,50,50);
64
size(200,200);
sm o o th();
rectM o de(CEN TER);
no Stro ke();
// Sauvegarde de A
p ushM atrix();
// Transfo rm atio n B
translate(width/2,height/2);
// Sauvegarde de B
p ushM atrix();
// Transfo rm atio n C
ro tate(PI/4);
// D essin du carr no ir
fill(0);
rect(0,0,120,120);
// Restauratio n de B
p o p M atrix();
// D essin du carr blanc qui ne tient p as co m p te
// de la ro tatio n ro tate(PI/4)
fill(255);
rect(0,0,50,50);
// Restauratio n de A
p o p M atrix();
// D essin du carr gris
fill(128);
rect(0,0,100,100);
65
Transformer en 3D
Toutes les transformations que nous venons d'aborder sont
applicables en trois dimensions (3D). Processing permet de passer
en 3D au moment de l'appel size() :
size(300,300,P 3 D );
66
flo at rx = 0;
flo at ry = 0;
flo at z = 100;
vo id setup () {
size(200,200,P3D );
}
vo id draw() {
backgro und(128);
rx = m ap (m o useX, 0,width,-PI,PI);
ry = m ap (m o useY, 0,height,-PI,PI);
translate(width/2,height/2,z);
ro tateX(rx);
ro tateY(ry);
bo x(30);
}
Dans cet exemple, map()va transformer la valeur 100 qui est dans
l'intervalle [0;200] et calculer la valeur quivalente dans l'intervalle
[0;1]. La valeur 0.5 est retourne dans m.
Dans notre sketch, cette fonction permet de transformer la valeur
de mouseX dans l'intervalle situ entre 0 et width en une valeur
quivalente dans l'intervalle entre -PI et PI.
Les concepts de pushMatrix() et popMatrix() sont aussi applicables
en 3D pour sauvegarder et restaurer les transformations. C'est le
meilleur moyen pour dessiner des univers en 3D, contenant
plusieurs objets en mouvement les uns par rapport aux autres sans
avoir recours des concepts mathmatiques complexes.
Toutes les transformations dans Processing sont stockes dans un
tableau de 16 nombres qui est appel matrice ou matrix en anglais.
Ces nombres sont directement modis par des appels aux
fonctions de transformations. Si vous tes curieux, vous pouvez
imprimer ce tableau par la fonction printMatrix().
67
PROGRAMMER
68
Les variables
Une variable est une donne que l'ordinateur va stocker dans
l'espace de sa mmoire. C'est comme un compartiment dont la
taille n'est adquate que pour un seul type d'information. Elle est
caractrise par un nom qui nous permettra d'y accder facilement.
int
Dans la syntaxe de Processing, on peut stocker un nombre entier,
par exemple 3, dans une variable de type int .
int entier;
entier = 3;
p rint(entier);
float
Il s'agit d'un nombre avec dcimales, par exemple 2,3456.
flo at decim al;
decim al = PI;
p rint(decim al);
double
Il s'agit galement de nombre avec dcimales, mais qui fournissent
davantage de prcision que le type float.
69
boolean
Il s'agit d'un type de variable qui ne connat que deux tats : Vrai
(true ) ou Faux (false ). Elle est utilise dans les conditions pour
dterminer si une expression est vraie ou fausse.
bo o lean vraifaux;
vraifaux = true;
p rintln(vraifaux);
char
Cette variable sert stocker un caractre typographique (une
lettre). Notez l'usage de ce qu'on appelle des guillemets simples.
char lettre;
lettre = 'A';
p rint(lettre);
string
Cette variable sert stocker du texte. Notez l'usage des guillemets
doubles.
String texte;
texte = "B o njo ur!";
p rint(texte);
color
Sers stocker une couleur. Cette variable est utile lorsqu'on veut
rutiliser souvent les mmes couleurs.
no Stro ke();
co lo r blanc = co lo r(255, 255, 255);
co lo r no ir = co lo r(0, 0, 0);
fill(blanc); rect(0, 0, 25, 25);
70
fill(no ir);
71
Les conditions
Les conditions donnent une part d'autonomie votre ordinateur.
Elles lui permettent de modifier le comportement du programme en
fonction de diverses conditions de votre choix. Par exemple, si vous
vouliez changer l'apparence de votre programme en fonction de
l'heure, vous pourriez lui demander d'avoir un fond noir entre 10
heures du soir et 6 heures du matin et un fond blanc le reste du
temps. C'est ce questionnement Quelle heure est-il ? qui
constitue la condition. S'il fait nuit, je dois dessiner un fond noir,
sinon je dessine un fond blanc pourrait constituer en quelque sorte
le dialogue interne de Processing lorsqu'il rencontre une condition.
Comparaison
La base de la condition, c'est la comparaison. Avant de pouvoir agir
selon une condition, il faut d'abord formuler la question que
Processing doit se poser. Cette question sera quasiment toujours une
question de comparaison.
72
Egalit
Pour vrier l'galit de deux valeurs, on utilise la formule suivante:
if (valeur1 == valeur2) { } . L'exemple suivant crit "Il est midi" dans la
console si la mthode ho ur() donne la valeur 12.
if (ho ur() == 12) {
p rintln("Il est m idi !");
} else {
p rintln("Ce n'est p as m idi !");
}
73
74
Les rptitions
Les rptitions permettent d'excuter une srie d'instructions
plusieurs fois de suite. Elles vitent de dupliquer inutilement des
portions de code. Attention ! les rptitions ne permettent pas de
crer des animations dans le temps (d'autres instructions existent
pour cela) ! Lorsque l'ordinateur lit le programme et rencontre une
boucle, il va excuter instantanment autant de fois de suite le code
crit dans le bloc de la boucle qu'on lui a indiqu.
L'exemple ci-dessous va nous permettre d'illustrer simplement cette
notion. L'objectif est de raliser un dessin achant dix lignes noires
horizontales. Le premier code contient dix fois l'instruction line() , le
second code est ralis partir d'une boucle. Le rsultat des deux
codes est le mme, la dirence se situant au niveau de la longueur
du code, l'un tant plus rapide saisir (et ultrieurement modier)
que l'autre.
La boucle for
Ce type de boucle permet de rpter une srie d'instructions un
nombre de fois dni. Elle incorpore une variable qui va
s'incrmenter chaque passage dans la boucle. On utilise souvent i
comme nom pour la variable interne de la boucle. Elle comprend :
un nombre de dpart, un nombre maximal et une incrmentation. Sa
syntaxe est la suivante : fo r (int i = N o m breD eD p art; i < N o m breM axim al; i
= i + IN CREM EN T) { } .
75
Les compteurs
Jusqu' maintenant, nous avons utilis les boucles fo r de manire
ce que la variable interne de la boucle soit directement exploitable.
Dans l'exemple prcdent, elle nous donne immdiatement la
valeur exacte de la position sur l'axe x du rectangle dessiner.
Les boucles fo r peuvent aussi tre utilises comme des compteurs.
On leur donne un minimum, un maximum et on incrmente la
variable seulement de 1 chaque tape de la boucle : ceci permet de
compter le nombre de fois que les instructions seront excutes,
d'o l'expression de compteur.
Cette mthode implique davantage de calculs mathmatiques pour
exploiter la variable au sein de la boucle.
fo r (int i = 0; i < 5; i = i + 1) {
rect(i, 0, 10, 10);
}
76
fo r (int i = 0; i < 5; i = i + 1) {
rect(i * 15, 0, 10, 10);
}
Boucle de dpart
translate(7, 7);
fo r (int x = 0; x < 6; x = x + 1) {
rect(x * 15, 0, 10, 10);
}
Deux boucles
translate(7, 7);
//Prem ire bo ucle (hauteur)
fo r (int y = 0; y < 6; y = y + 1) {
//Seco nde bo ucle (largeur)
fo r (int x = 0; x < 6; x = x + 1) {
rect(x * 15, y * 15, 10, 10);
}
}
77
Trois boucles
Dans cet exemple nous introduisons un espace 3D. Pour placer nos
rectangles dans la profondeur, nous devons utiliser la mthode
translate() .
Variations
Voici une srie de variations des exemples ci-dessous qui utilisent les
mthodes fill() , scale() ou ro tate() . A vous d'exprimenter les
transformations au sein de boucles.
78
Les listes
On peut mettre de nombreux genres de choses dans une variable : un
chire, un chire virgule, la phrase d'un texte, voire mme toute
une image ou tout un morceau de son. Mais bien que les variables
puissent thoriquement contenir presque tout type de valeur, elles
ne peuvent contenir qu'une seule de ces valeurs la fois. Dans
certains cas, il serait pratique d'avoir plusieurs choses regroupes, au
moins du mme genre, dans une seule entit. C'est pour cette raison
qu'un genre trs particulier de variables t invent, les listes.
Les listes permettent de stocker un nombre x d'avance de
donnes ou d'objets dans une mme variable. Au lieu de crer 20
variables pour stocker 20 valeurs direntes d'un mme genre, nous
pouvons crer un seul contenant pour ces 20 valeurs et y accder
une par une via cette seule et unique variable.
C'est d'ailleurs pour cette raison qu'il faut indiquer le mot int , car
Processing a besoin de connatre la taille de chaque case de la liste
(dans ce cas prcis, nous lui indiquons l'aide de cette instruction
qu'il s'agit de nombres entiers). S'il s'agissait d'images, comme on le
verra plus loin, chaque case de la liste aurait besoin de davantage de
place.
Notez que sur certains claviers francophones ou sur certaines
plates-formes, il est parfois dicile de localiser le crochet
d'ouverture [ et de fermeture ] . Sur un clavier franais
d'ordinateur Apple, par exemple, il faut appuyer en mme temps sur
les 3 touches {alt} + {maj} + ( pour le crochet d'ouverture, et {alt} +
{maj} + ) pour le crochet de fermeture. Par ailleurs, on doit taper
{alt} + ( pour l'accolade d'ouverture et {alt} + ( pour l'accolade de
fermeture.
79
Remplir la liste
Placer des valeurs dans une liste fonctionne de la mme manire
qu'assigner une valeur une variable. Il faut en plus prciser quelle
position de la liste on ajoute la valeur.
num bers[0] = 90;
num bers[1] = 150;
num bers[2] = 30;
80
81
82
En utilisant une liste, on peut mettre toutes nos images dans une
seule variable qui doit tre initialise qu'une seule fois : PIm age[] im ages
= new PIm age[5]. Ensuite, il sut de remplir chaque valeur de chier
pour chacun des emplacements dans la liste.
Mais mme cette criture est trop longue. Comment allez-vous
faire, par exemple, lorsque vous aurez 200 images, voire 2.000 ?
Allez-vous vraiment crire 200 fois toutes ces lignes ? Et comment
ferez-vous lorsque vous voudrez changer le nom des chiers
imports ?
Voici la meilleure manire d'importer une suite d'images :
size(500,500);
PIm age[] im ages = new PIm age[20];
fo r(int i=0; i<im ages.size(); i++) {
im ages[i] = lo adIm age("im age_" + i + ".p ng");
im age( im ages[i], rando m (width), rando m (height) );
}
83
84
size(512,256);
PIm age lho o q;
lho o q = lo adIm age("lho o q.p ng");
im age(lho o q,0,0);
int x = 119;
int y = 119;
in t in d e x = x + ( y * lh o o q . w id t h ) ;
c o lo r c = lh o o q . p ix e ls [in d e x ];
no Stro ke();
fill(c);
rect(256,0,256,256);
stro ke(0);
line(x-5,y,x+5,y);
line(x,y-5,x,y+5);
Les deux lignes les plus importantes sont soulignes en gras dans le
code :
85
in t in d e x = x + ( y * lh o o q . w id t h ) ;
c o lo r c = lh o o q . p ix e ls [in d e x ];
Nous vous rappelons qu'une image n'est rien d'autre qu'une liste de
pixels, une image tant notamment compose non pas d'une mais
de plusieurs couleurs. Dans Processing, les variables de type PIm age
servent d'ailleurs stocker les valeurs de ces pixels dans une longue
liste linaire.
Ce que nous voyons comme une liste deux {x,y} dimensions, PIm age
la voit en une seule dimension. Si nous voulons trouver une valeur
la position {2,1}, en ralit il faut indiquer que nous voulons la
position 17 de l'image. En eet, entre un point sur une ligne et le
point correspondant sur la prochaine ligne, il existe 16 pixels.
Autrement dit, PIm age doit compter 16 pixels chaque fois qu'il veut
descendre une ligne.
C'est pour cette raison que la formule pour identier un pixel dans
une image s'crit {x + (largeur image} * y}. Pour chaque ligne y, il
existe une largeur de valeurs x qu'il faut dpasser.
Dans cet exemple, on dessine une grille de trois pixels par trois.
Nous allons dessiner cette image plus grande en l'tirant 80 x 80
pixels afin de mieux la voir.
PIm age im g = createIm age(3, 3, ARG B );
im g.lo adPixels();
im g.p ixels[0] = co lo r(255, 0, 0);
im g.p ixels[1] = co lo r(0, 255, 0);
im g.p ixels[2] = co lo r(0, 0, 255);
86
Notez qu'il faut indiquer Processing que nous allons modier une
image via lo adPixels() et que nous avons termin de modier l'image
via up datePixels() . En l'absence de ces instructions, on risque de ne pas
voir les rsultats de notre modification dans la liste.
Notez galement que vous pourriez aussi raliser ce genre de
peinture numro en utilisant des rptitions.
Les applications cratives des listes sont multiples. Il ne vous reste
plus qu' laisser le champ libre votre imagination.
87
Les mthodes
Une mthode est un bloc qui contient une srie d'instructions que
l'on souhaite rutiliser. L'intrt des mthodes rside dans la
possibilit de rutiliser du code : nous aimerions crire une seule fois
une action tout en pouvant la rpter autant de fois que ncessaire.
En englobant notre code dans une mthode, il devient possible
d'appeler celle-ci diffrents moments de notre programme.
Vous connaissez dj plusieurs mthodes, mais uniquement en tant
qu'utilisateur. Par exemple, rect() , ellip se() , line() stro ke() sont toutes
des mthodes. En crant nos propres mthodes, nous nous
rapprochons d'une certaine manire du rle cratif des concepteurs
de Processing : libert nous est donne d'inventer des formes ou des
fonctionnalits qu'ils n'ont pas pu ou voulu crire l'origine.
Voici un exemple purement thorique de ce que la structuration d'un
sketch l'aide de mthodes pourrait ventuellement donner au nal
si nous devions dessiner un joli paysage.
backgro und(255);
jo liPaysage();
arbre(cyp res, 0,300);
lune(400,100);
gazo n(0,300,width,100);
m o uto n(50,133);
m o uto n(213,98);
m o uto n(155,88);
88
Mots cls
Lorsque nous crons nos propres mthodes, il faut donner
chacune d'entre elles un nom. Une fois la mthode dnie, on peut
s'en servir dans le programme. Il suffit de l'appeler par son nom.
Processing nous fournit dj plusieurs mthodes que nous pouvons
remplacer par nos propres versions. Ce sera le cas des mthodes
draw() , setup () , m o usePressed() ... que vous dcouvrirez dans d'autres
chapitres. Nous pouvons galement crer des mthodes sur mesure
en leur donnant le nom de notre choix. Dans ce cas, il faut
simplement viter d'utiliser un nom qui est dj pris.
Dcomposer
Jusqu'ici, nous avons programm dans Processing directement, en
commenant saisir du code depuis le haut du programme et en
laissant celui-ci s'excuter jusqu'en bas. Lorsque nous voulons
construire nos propres mthodes, nous devons commencer
dcomposer nos programmes en plusieurs parties spares. Cela
nous permettra par exemple d'indiquer les parties qui doivent
s'excuter tout de suite lorsque nous appuyons sur le bouton run de
celles qui seront appeles par nos propres soins l'intrieur du
programme.
Par contre, en utilisant ce procd de programmation, nous ne
pourrons plus crire des instructions directement dans Processing
sans au pralable les avoir intgres au sein d'une mthode ou d'une
classe. Avec les mthodes, c'est tout ou rien.
void setup()
Processing nous ore une instruction ayant pour fonction de
contenir le code de dbut de notre programme. Il s'agit de la
mthode setup () :
vo id setup () {
}
89
En fait, ce mouton est cach dans une bote, alors on ne voit qu'une
bote ! On y dessine galement des trous, an que le mouton puisse
respirer. Nous appelons plusieurs fois cette mthode pour dessiner
plusieurs moutons.
Voici le code de ce dessin :
vo id setup () {
size(600, 220);
backgro und(153,204,255);
sm o o th();
// l'ap p el no tre m tho de de dessin d'un m o uto n
dessinerM o uto n();
translate(120, 60);
dessinerM o uto n();
translate(120, 60);
dessinerM o uto n();
translate(140, -60);
dessinerM o uto n();
}
90
beginShap e();
vertex(100, 40);
vertex(120, 20);
vertex(120, 60);
vertex(100, 80);
endShap e(CLO SE);
fill(0);
ellip se(40, 60, 5, 5);
ellip se(60, 60, 5, 5);
ellip se(80, 60, 5, 5);
}
Chaque fois que Processing tombe sur le mot dessinerM o uto n() , il
vrie si ce mot existe en tant que mthode quelque part dans le
programme. Si cette mthode existe, il fait un dtour par cette
mthode et fait tout ce qui s'y trouve.
91
Nous avons plac entre chaque appel la mthode dessinerM o uto n() ,
une instruction translate( x,y ) . Cette instruction nous permet de ne
pas dessiner quatre fois le mme mouton au mme endroit. Ce n'est
pas le rle de ce chapitre de vous expliquer les transformations
comme translate() ; sachez nanmoins que translate() sert dplacer
le point d'origine o dbutera le trac d'un dessin.
vo id dessinerM o uto n() {
/* ... */
}
92
93
94
95
Les objets
La programmation oriente objet (POO) permet de structurer son
programme partir des lments concrets prsents dans l'espace
de dessin (balles, murs, personnages, etc.). Un objet est un modle
qui peut tre dupliqu et dont chaque copie est unique. Ces 2
notions constituent les briques de base d'une application structure.
Un objet est compos de caractristiques (proprits) et d'actions
(mthodes). Chaque instance (chaque copie unique) d'un objet
possde sa vie propre avec des caractristiques spciques tout en
pouvant eectuer potentiellement les mmes actions que ses
surs (les autres instances du mme objet).
Ne vous inquitez pas si ces dnitions vous paraissent obscures
premire lecture. Au l de ce chapitre, nous allons dtailler ces
notions l'aide d'un exemple simple et concret : le trac d'une puis
de deux balles (de simples cercles) l'cran. Pour raliser ce dessin,
nous faisons appel un modle de balle (l'objet) et ses copies (les
instances) qui possdent chacune des caractristiques diffrentes.
Le modle de la balle est compos des caractristiques (variables)
suivantes :
position sur l'axe x
position sur l'axe y
couleur
Le modle de balle contiendra l'action (mthode) suivante :
afficher
96
Crer un objet
La cration d'un objet se passe en deux tapes : la dnition du
modle de l'objet et la cration d'une copie unique de l'objet
(instance).
Le modle
Processing utilise le mot cl class pour dnir un objet. Sa syntaxe
s'apparente la dnition d'une mthode : class no m O bjet {} . Toutes
l e s caractristiques et les actions sont crites l'intrieur. En
gnral on va crire la dnition d'un objet tout la n de notre
code. ventuellement si l'objet est complexe, on crera un nouvel
onglet dans la fentre d'dition de Processing (un nouveau chier)
afin de le sparer du reste du code.
class B alle {
}
L'instance
Une fois le modle dni, il faut crer une copie de ce modle qui
sera unique. Processing utilise le mot cl new pour crer une
instance d'un objet : new no m O bjet(); . Il faut stocker cet objet dans
une variable afin de pouvoir le manipuler ultrieurement.
B alle m aB alle = new B alle();
Les caractristiques
L e s objets ont des caractristiques qui les dnissent et les
rendent uniques. Ce sont des variables qui sont dclares au dbut
de l'objet.
class B alle {
//D claratio n des p aram tres de base de la balle
flo at x;
flo at y;
co lo r co uleur;
}
97
Le constructeur
Le constructeur est une mthode appele lorsque l'objet est cr.
Il est l'quivalent de la mthode setup () de l'application. Il porte
toujours le nom de l'objet. Le constructeur va prendre un certain
nombre de variables en paramtre et les assigner l'objet :
class B alle {
//D claratio n des p aram tres de base de la balle
flo at x;
flo at y;
co lo r co uleur;
B alle (flo at no uvX, flo at no uvY, co lo r no uvCo uleur) {
x
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
}
}
Les actions
Les actions d'un objet reprsentent les direntes choses qu'il peut
eectuer. Ce sont des mthodes mentionnes (dclares)
l'intrieur de l'objet. Appeler une action sur une instance d'un objet
se fait de la manire suivante: no m D eLInstance.no m D eLaM etho de();
Dans notre exemple, notre balle comportera une seule action : tre
ache. Nous allons utiliser les instructions fill() et ellip se () pour
la dessiner.
class B alle {
//D claratio n des p aram tres de base de la balle
flo at x;
flo at y;
co lo r co uleur;
B all (flo at no uvX, flo at no uvY, co lo r no uvCo uleur) {
x
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
}
vo id disp lay() {
fill(co uleur);
ellip se(x, y, 40, 40);
}
}
98
disp lay()
depuis
vo id draw() {
m aB alle.disp lay();
}
Programme final
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
}
//D essin de la balle
vo id disp lay() {
fill(co uleur);
ellip se(x, y, 40, 40);
}
}
99
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
}
//D essin de la balle
vo id disp lay() {
fill(co uleur);
ellip se(x, y, 40, 40);
}
}
100
Les commentaires
Commenter et documenter son programme sont essentiels pour
maintenir un code clair et pour faciliter la collaboration avec
d'autres personnes. Cette pratique de programmation permet
galement de se rappeler ultrieurement l'utilit de telle ou telle
variable, mthode, etc. Au moment de la conception d'un
programme, on possde une vue d'ensemble du code et parfois
commenter notre sketch peut nous sembler inutile. Pourtant,
lorsqu'on veut retravailler ou rutiliser ce code quelques jours, voire
quelques mois plus tard, l'usage de commentaires nous permet de
nous y replonger plus rapidement.
Processing ore deux manires distinctes de commenter son code :
les commentaires en ligne, et les blocs de commentaires multilignes.
Commentaires en ligne
Pour crire un commentaire qui ne prend qu'une seule ligne, il sut
de placer les caractres // au dbut du commentaire. Tout le texte
qui est crit sa droite sur la mme ligne sera considr comme
commentaire et donc ne sera pas pris en compte par le programme
lors de son excution. Exemples de commentaires en ligne :
vo id setup () {
// D finit la taille du p ro gram m e
size(400, 300);
sm o o th(); // Active le lissage des co nto urs
}
Blocs de commentaires
Si une explication ncessite un commentaire plus long, on peut
l'crire sur plusieurs lignes en le plaant entre les caractres /* et
*/. Par exemple :
/*
La m tho de setup initialise le p ro gram m e,
o n p eut y dfinir la taille de la fentre,
dfinir l'tat initial du p ro gram m e, etc.
*/
vo id setup () {
}
101
102
ANIMER
103
La mthode draw
Jusqu'ici, nous avons cr ce que nous pouvons appeler des
programmes linaires : on dmarre le programme, celui-ci excute
notre dessin, et tout s'arrte la n des instructions de notre
sketch, en bas de la fentre d'dition.
Mais Processing n'est pas uniquement un environnement de dessin
crit, c'est galement un environnement interactif. Et pour qu'il y ait
interactivit, il nous faut du temps, en d'autres termes, un moyen de
prolonger notre dessin pour que celui-ci puisse se modier en
suivant chronologiquement certaines tapes, selon dirents
facteurs et conditions. C'est le rle de la boucle innie, appele en
permanence par la machine pour ractualiser notre dessin. Dans
Processing, cette boucle innie s'crit draw() . Elle est souvent
accompagne par la mthode setup () qui permettra de prparer la
fentre de visualisation (l'espace de dessin), par exemple en lui
donnant une taille au dpart.
C'est l'absence de ces deux mthodes qui rend Processing inerte. Si
votre code ne dispose pas de mthode draw() , l'excution du
programme s'arrtera la fin du code de votre programme.
draw()
Commencez un nouveau programme Processing vide, tapez les
lignes suivantes dans la fentre d'criture et appuyez sur le bouton
run :
vo id draw() {
backgro und( rando m (255) );
}
104
Par dfaut, les instructions qui se trouvent entre les deux accolades
de la mthode draw() seront appeles 30 fois par seconde. 30 fois par
seconde Processing ouvrira cette mthode et regardera ce qui est
crit dedans pour l'excuter. Nous pouvons mettre autant
d'instructions que nous voulons l'intrieur de cette mthode. Ces
instructions seront joues par Processing de manire cyclique, tel un
mtronome.
Attention aux erreurs d'criture, car ds que Processing en
rencontrera une, votre programme s'arrtera net c'est la n de
votre animation. En revanche, si vous avez crit une mthode draw()
sans erreurs, elle sera appele en boucle, 30 fois par seconde,
jusqu' ce que l'utilisateur arrte le programme, qu'une panne
d'lectricit arrive, ou que la n du monde se produise. C'est donc
grce cette mthode excutant du code en rptition que nous
allons pouvoir crer des animations.
Frquence d'excution
Il est possible de spcier une valeur dirente notre mtronome
en utilisant la mthode frameRate().
Si vous modiez l'exemple prcdent comme suit, vous remarquerez
que la vitesse de l'animation a t diminue (divise par 3).
vo id draw() {
fram eRate(10);
backgro und( rando m (255) );
}
105
setup()
Souvent, voire la plupart du temps, il est ncessaire de placer
certaines instructions au tout dbut du programme. C'est la nature
et la porte de ces instructions sur le programme qui nous incitent
les placer cet endroit. Par exemple, dans Processing, la taille de la
fentre de visualisation du dessin ne peut tre dnie qu'une seule
fois dans un sketch ; ce paramtrage de l'espace de dessin ne peut
donc tre plac l'intrieur de la mthode draw() car cette mthode
s'excute plusieurs fois durant le droulement du programme.
A moins de se satisfaire de la dimension par dfaut de 100x100 pixels,
dnir la taille de la fentre de visualisation peut s'avrer trs utile.
C'est pour toutes ces raisons qu'une deuxime mthode
complmentaire a t cre : la mthode setup () .
vo id setup () {
}
106
Background()
Voici un programme qui remplit progressivement l'cran avec des
ellipses.
107
vo id setup () {
size(200, 200);
fill(0);
}
vo id draw() {
ellip se(rando m (200), rando m (200), 20, 20);
}
108
Ajouter un fondu
Il existe une astuce, souvent utilise dans la communaut des
utilisateurs de Processing, qui consiste eacer le fond de l'image
l'aide d'un rectangle semi-transparent plutt qu'avec l'instruction
backgro und() . Ce procd permet d'obtenir un eet d'eacement
graduel, de fondu.
vo id setup () {
size(200,200);
backgro und(0);
no Stro ke();
}
vo id draw() {
fill(0, 0, 0, 20);
rect(0, 0, 200, 200);
fill(255);
ellip se(100 + rando m (-20,20), 100 + rando m (-20,20), rando m (50),
rando m (50));
}
109
La ligne de temps
Pour crer une animation, il faut qu'il y ait du mouvement. Le
mouvement implique un changement du dessin dans le temps, par
exemple une modication de la position ou de la couleur d'un de ces
lments graphiques. Les informations lies ces changements
peuvent tre stockes dans des variables.
Pour crer des animations, il faut savoir quel moment nous nous
trouvons par rapport une ligne de temps. Pour ce faire, nous
pouvons soit utiliser l'heure qu'il est, soit compter (par exemple de
un dix).
Les images sont dessines les unes par-dessus les autres. L'appel
l'instruction backgro und(0) remplit l'espace de dessin avec la couleur
dnie en paramtre (le nombre 0 correspondant du noir) ce qui
revient chaque fois effacer l'image prcdente.
110
111
112
co m p teur = co m p teur + 1;
rect(0, 0, width, height);
translate(width / 2, height / 2);
ro tate(radians(co m p teur));
line(-height, -height, height, height);
}
113
Code de base
Comme point de dpart, nous allons reprendre le programme de la
balle du chapitre Les objets qui nous permettait d'acher une
balle l'cran et lui ajouter progressivement des morceaux de code.
Les nouvelles parties du sketch sont signales en gras avec la
mention //AJOUT ou //DEBUT AJOUT et //FIN AJOUT. Pour vous
familiariser avec le fonctionnement de ce nouveau programme,
vous pouvez galement copier tout le bloc du code initial dans votre
fentre d'dition de Processing et progressivement lui ajouter la
classe ou la mthode concerne.
114
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
}
//D essin de la balle
vo id disp lay() {
fill(co uleur);
ellip se(x, y, 40, 40);
}
}
Le dplacement
La balle doit pouvoir se dplacer sur les axes x et y. Nous allons
crer deux variables dans le modle de l'objet qui caractriseront sa
vitesse sur les axes x et y. Ensuite nous allons ajouter une nouvelle
mthode bo uge() dans le modle de l'objet qui sera appele depuis la
mthode draw() du programme. Cette mthode va, chaque fois que
l'objet est ach, modier la position de la balle par rapport sa
vitesse. Il faudra aussi initialiser les variables dcrivant la vitesse
dans le constructeur. Pour commencer, nous allons leur donner une
valeur fixe.
class B alle {
//D claratio n des caractristiques de base de la balle
flo at x;
flo at y;
f lo a t v it e s s e X ; / / A J O U T
f lo a t v it e s s e Y; / / A J O U T
co lo r co uleur;
//Co nstructeur de la balle
B alle (flo at no uvX, flo at no uvY, co lo r no uvCo uleur) {
x
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
v it e s s e X = 2 ; / / A J O U T
v it e s s e s Y = 2 ; / / A J O U T
}
//D essin de la balle
vo id disp lay() {
fill(co uleur);
ellip se(x, y, 40, 40);
}
115
//D EB U T AJO U T
v o id b o u g e ( ) {
x = x + v it e s s e X ;
y = y + v it e s s e Y;
//FIN AJO U T
}
Les collisions
Pour le moment, ds que la balle touche le bord de l'cran, elle
continue son chemin. Selon l'exemple de la balle qui rebondit sur les
coins de l'cran du chapitre La ligne de temps , nous allons
ajouter une mthode testCo llisio n qui inversera la vitesse de la balle
lorsqu'elle touche les bords de l'cran.
class B alle {
//D claratio n des caractristiques de base de la balle
flo at x;
flo at y;
flo at vitesseX;
flo at vitesseY;
co lo r co uleur;
//Co nstructeur de la balle
B alle (flo at no uvX, flo at no uvY, co lo r no uvCo uleur) {
x
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
vitesseX = 2;
vitesseY = 2;
}
//D essin de la balle
vo id disp lay() {
fill(co uleur);
ellip se(x, y, 40, 40);
}
vo id m o ve() {
x = x + vitesseX;
y = y + vitesseY;
}
//D EB U T AJO U T
v o id t e s t C o llis io n ( ) {
/ / S i la b a lle t o u c h e u n m u r , e lle r e b o n d it
116
if ( x > w id t h - 2 0 || x < 2 0 ) {
v it e s s e X = v it e s s e X * - 1 ;
}
if ( y > h e ig h t - 2 0 || y < 2 0 ) {
v it e s s e Y = v it e s s e Y * - 1 ;
}
}
//FIN AJO U T
}
no Stro ke();
Code Final
Voici le code final, une fois toutes ces modifications effectues.
//D claratio n et cratio n d'une instance de l'o bjet B alle
B alle m aB alle = new B alle(100, 100, co lo r(255));
vo id setup () {
sm o o th(); //Lissage des dessins
size(400, 200); //Taille de la fentre
}
vo id draw() {
fill(0, 0, 0, 1);
rect(0, 0, width, height);
no Stro ke();
//D p lacem ent et affichage de la balle
m aB alle.bo uge();
m aB alle.testCo llisio n();
m aB alle.disp lay();
}
class B alle {
//D claratio n des p aram tres de base de la balle
flo at x;
flo at y;
flo at vitesseX; //AJO U T
flo at vitesseY; //AJO U T
co lo r co uleur;
//Co nstructeur de la balle
B alle (flo at no uvX, flo at no uvY, co lo r no uvCo uleur) {
x
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
117
vitesseX = 2; //AJO U T
vitesseY = 2; //AJO U T
}
//D essin de la balle
vo id disp lay() {
fill(co uleur);
ellip se(x, y, 40, 40);
}
vo id bo uge() {
x = x + vitesseX;
y = y + vitesseY;
}
vo id testCo llisio n() {
//Si la balle to uche une m ur, elle rebo ndit
if (x > width-20 || x < 20) {
vitesseX = vitesseX * -1;
}
if (y > height-20 || y < 20) {
vitesseY = vitesseY * -1;
}
}
}
118
L'animation
objets
de
plusieurs
Code de base
Comme point de dpart, nous allons reprendre le code de la balle
du chapitre Animer un objet qui nous permettait d'acher une
balle rebondissante l'cran. Tout au long du chapitre, nous allons
ajouter des portions de code l'exemple de base. Les nouvelles
parties sont signales en gras avec la mention //AJOUT ou //DEBUT
AJOUT et //FIN AJOUT. Pour vous familiariser avec le
fonctionnement de ce nouveau programme, vous pouvez
galement copier tout le bloc du code initial dans votre fentre
d'dition de Processing et progressivement lui ajouter la classe ou la
mthode concerne.
119
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
vitesseX = 2; //AJO U T
vitesseY = 2; //AJO U T
}
//D essin de la balle
vo id disp lay() {
fill(co uleur);
ellip se(x, y, 40, 40);
}
vo id bo uge() {
x = x + vitesseX;
y = y + vitesseY;
}
120
par
/ / D c la r a t io n d ' u n e v a r ia b le c o n t e n a n t le n o m b r e d e b a lle s
in t n b r e B a lle = 3 ;
/ / D c la r a t io n d ' u n e lis t e d ' in s t a n c e s d e l' o b je t B a ll
B a lle [] b a lle s = n e w B a lle [n b r e B a lle ] ;
c o lo r ( 2 5 5 ) ) ;
}
//FIN AJO U T
}
Dans la mthode draw() , nous allons aussi crer une boucle qui va
parcourir tous les lments de la liste pour les dplacer, tester leurs
collisions et les afficher. Nous allons remplacer
//D p lacem ent et affichage de la balle
m aB alle.bo uge();
m aB alle.testCo llisio n();
m aB alle.disp lay();
par
121
/ / C e t t e b o u c le v a d p la c e r e t a f f ic h e r le s t r o is b a lle s
f o r ( in t i = 0 ; i < n b r e B a lle ; i++) {
b a lle s [i]. b o u g e ( ) ;
b a lle s [i]. t e s t C o llis io n ( ) ;
b a lle s [i]. d is p la y ( ) ;
}
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
vitesseX = 2;
vitesseY = 2;
}
par celui-ci
//Co nstructeur de la balle
B alle (flo at no uvX, flo at no uvY, co lo r no uvCo uleur) {
x
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
v it e s s e X = 2 + r a n d o m ( - 1 , 1 ) ;
v it e s s e s Y = 2 + r a n d o m ( - 1 , 1 ) ;
}
Code final
Voici le programme complet :
//D claratio n d'une variable co ntenant le no m bre de balles
int nbreB alle = 3;
//D claratio n d'une liste d'instances de l'o bjet B alle
B alle[] balles = new B alle[nbreB alle];
vo id setup () {
sm o o th(); //Lissage des dessins
size(400, 200); //Taille de la fentre
//Cette bo ucle va crer tro is balles blanches
//au centre de l'cran
fo r (int i = 0; i < nbreB alle; i++) {
balles[i] = new B alle(width/2, height/2,
co lo r(255));
}
}
vo id draw() {
fill(0, 0, 0, 1); // Co uleur avec transp arence.
rect(0, 0, width, height);
no Stro ke();
122
= no uvX;
= no uvY;
co uleur
= no uvCo uleur;
123
La lecture du son
Processing est un environnement principalement ddi la cration
visuelle. Il n'a pas t conu au dpart pour jouer du son, et encore
moins pour gnrer directement des ondes audio, tel un logiciel
comme Pure Data. Par la suite, de nombreuses bibliothques
externes ont t cres pour tendre les capacits sonores de
Processing. Ainsi vous pouvez n'importe quel moment intgrer ces
bibliothques externes dans vos programmes : des synthtiseurs,
des sampleurs audio, des interfaces MIDI, des squenceurs, etc.
Sachez toutefois que ce n'est pas la mission de base de Processing
davantage centre sur la gnration de formes visuelles.
Dans ce chapitre, nous allons nous familiariser avec un minim de
fonctionnalits audio disponibles par dfaut dans Processing.
Minim
Il a t dcid un moment donn d'intgrer dans toute distribution
Processing la bibliothque audio Minim pour pouvoir par dfaut jouer
des chiers audio ou capter le son entrant par le microphone. A
priori cette bibliothque est dj installe sur votre machine. Pour
vrier sa prsence et l'intgrer dans votre programme, il sut
d'aller dans le menu Sketch > Import Library... > Minim audio.
124
Configurer Minim
Le lancement de notre sketch via le bouton Run ne sut pas pour
jouer un son. Au pralable, il faut prvoir d'activer les fonctionnalits
de gestion audio de Minim (son moteur audio en jargon
informatique). Pour jouer un son, Minim doit en eet auparavant
demander un accs la carte son de votre ordinateur. Ne vous
inquitez pas, Minim s'occupe de toute cette cuisine interne pour
vous, il sut de lui dire de s'activer pour cela. Le fait d'avoir activ
Minim suppose de prvoir de le dsactiver la n de notre
programme.
Si vous ne comprenez pas tout ce que nous venons de dire, ce n'est
pas trop grave. Sachez simplement qu'il faut saisir le code suivant au
dbut de chaque programme utilisant Minim :
im p o rt ddf.m inim .*;
M inim m inim ;
vo id setup () {
m inim = new M inim (this);
}
Si par curiosit vous voulez savoir quoi sert le mot this dans ce
programme, sachez qu'il sert indiquer Processing que nos
instructions s'appliquent ce programme. Minim a besoin de
connatre l'adresse de ce programme (le ntre) pour le faire
communiquer avec la carte son de notre ordinateur. Encore une fois,
si vous ne comprenez pas ce que nous venons de dire, ce n'est pas
grave. Sachez seulement que ces mots doivent tre crits au dbut
et la n de chaque programme lorsque nous voulons produire du
son.
Importer un son
Tout comme les images photographiques ou la typographie, nous
allons importer un chier son dans Processing pour pouvoir le jouer
dans notre programme. Pour bien russir cette tape, nous vous
recommandons de sauvegarder d'abord votre sketch.
Nos sons peuvent venir de plusieurs sources : des sons tlchargs,
des sons que vous avez crs vous-mme via un logiciel comme
Audacity, voire des sons que vous pouvez trouver par dfaut dans
votre systme d'exploitation.
125
Formats audio
Vous pouvez utiliser trois formats audio avec Minim : WAV, AIFF, et
MP3. Les deux premiers formats peuvent tre exports par dfaut via
des logiciels libres comme Audacity. Le troisime format ncessite
ce jour un plug-in pour Audacity, mais celui-ci est relativement facile
installer.
Comme pour les images, les dirents formats ont leurs avantages
et dsavantages.
126
Une horloge
Voici un programme simple, qui anime une ellipse avec les secondes
de l'horloge de votre ordinateur (l'horloge systme). Nous allons
utiliser ce programme comme base pour crer une horloge qui
sonne toutes les minutes. Pour mieux anticiper cet vnement qui se
droule toutes les soixante secondes car il ncessite une certaine
patience nous allons reprsenter les secondes par une ellipse qui
s'agrandit progressivement depuis le centre de l'espace de dessin.
vo id draw() {
backgro und(255);
ellip se(50,50,seco nd(),seco nd());
}
vo id draw() {
if ( s e c o n d ( ) = = 0 ) {
127
if ( s e c o n d ( ) = = 0 ) {
backgro und(255,0,0);
} e ls e {
backgro und(255);
}
ellip se(50,50,seco nd(),seco nd());
}
128
129
130
vo id draw() {
}
vo id keyPressed() {
if (key == 'a') p ing.trigger();
if (key == 'b') {
p o p .rewind();
p o p .p lay();
}
if (key == 'c') so ng.p lay();
}
vo id sto p () {
p ing.clo se();
p o p .clo se();
so ng.clo se();
m inim .sto p ();
sup er.sto p ();
}
Documentation
Pour plus d'informations sur les direntes fonctionnalits de
Minim, ainsi qu'un grand nombre d'exemples d'utilisation (avec leur
code source librement mis disposition), reportez-vous au site
http://code.compartmental.net/tools/minim/ ou la documentation
technique (plus dicile lire) consultable l'adresse
http://code.compartmental.net/minim/javadoc/ddf/minim/packagetree.html.
131
SORTIR
132
L'exportation
Pour l'instant, nous avons travaill exclusivement dans
l'environnement de Processing. Nous tapons des lignes de code et
nous les excutons depuis l'interface par le bouton Run. A prsent,
nous allons voir que Processing intgre deux manires d'exporter
notre programme pour le distribuer. L'une, destination du web,
permet d'exposer son animation en ligne, visible sur une page dans
un navigateur. L'autre procd de diusion permet de crer une
application autonome fonctionnant directement sur un ordinateur
utilisant Windows, Mac ou Linux. Dans les deux cas, plus besoin de
l'diteur pour faire tourner votre sketch.
133
134
135
L'impression
Pour l'instant, nous avons travaill sur l'cran en gnrant des
images et des animations. Nous allons maintenant nous intresser
aux possibilits qu'ore Processing en matire d'impression : nous
allons crer un document PD F (Portable Document Format)
contenant des formes gomtriques vectorielles, document qui
pourra ensuite tre imprim sur du papier ou un autre mdium.
Mode direct
Dans ce premier exemple, nous allons gnrer 500 cercles
alatoirement et les dessiner dans un document PDF, qui sera sauv
dans notre dossier de travail.
im p o rt p ro cessing.p df.*;
size(400, 400, PD F, "Cercles.p df");
fo r (int i = 0; i < 500; i++)
ellip se(rando m (width),rando m (height), 50, 50);
exit();
136
Mode enregistrement
Nous allons voir maintenant comment dessiner la fois sur l'cran
et dans un chier .pdf l'aide des commandes beginReco rd() et
endReco rd() . Ces deux mthodes vont nous permettre de dmarrer et
arrter l'enregistrement des commandes graphiques dans un chier
PDF.
Comme prcdemment, le chier gnr est sauvegard dans le
dossier du sketch.
Dans l'exemple suivant, nous allons raliser un outil graphique, une
sorte de pinceau numrique dont la taille du trac dpend de la
vitesse laquelle nous dplaons la souris. Au dmarrage de
l'application, dans le setup () , nous indiquons le dbut de
l'enregistrement par la commande beginReco rd() qui prend en
paramtres le type d'export (pour l'instant Processing ne supporte
que l'extension PD F ) et le nom du chier en second paramtre.
Lorsqu'on appuie sur la touche ESPACE , l'enregistrement est stopp et
l'application s'arrte. Comme prcdemment, le chier gnr est
sauvegard dans le dossier du sketch.
137
im p o rt p ro cessing.p df.*;
bo o lean drag = false;
vo id setup ()
{
size(400, 400);
sm o o th();
beginReco rd(PD F, "Cercles.p df");
}
vo id draw() {
if (drag)
{
flo at r = dist(p m o useX, p m o useY, m o useX, m o useY) + 5;
ellip se(m o useX, m o useY, r, r);
}
}
vo id m o useD ragged() {
drag = true;
}
vo id m o useReleased() {
drag = false;
}
vo id keyPressed() {
endReco rd();
exit();
}
La ligne suivante :
flo at r = dist(p m o useX, p m o useY, m o useX, m o useY) + 5;
138
Un gnrateur de livres
Au lieu de gnrer un document d'une seule page, nous allons
prsent raliser un livre de plusieurs pages. Nous allons crer
dynamiquement
un
folioscope
(http://fr.wikipedia.org/wiki/Folioscope)
dont chaque page
reprsentera une image de l'animation un instant donn. C'est la
mthode nextPage() qui va crer une page vierge chaque fois que
cette instruction sera appele durant l'enregistrement.
im p o rt p ro cessing.p df.*;
PG rap hicsPD F p df;
flo at x = 0;
flo at y = 75;
vo id setup () {
size(400, 150);
sm o o th();
p df = (PG rap hicsPD F) beginReco rd(PD F, "B ulle.p df");
}
vo id draw() {
backgro und(255);
fill(0);
ellip se(x, y, 30, 30);
x = x + rando m (5);
y = y + rando m (-5, 5);
if (x - 30 > width) {
endReco rd();
exit();
}
p df.nextPage();
}
139
140
La vido
Processing vous ore la possibilit d'exporter votre sketch anim ou
interactif sous forme d'animation vido au format QuickT ime. Pour
crer des vidos, nous allons utiliser un objet prdni M o vieM aker de
la librairie o rg.p ro cessing.video . Attention, pour les utilisateurs sous
Linux, cette fonction n'est ce jour pas disponible.
L'objet MovieMaker
L'objet M o vieM aker est une classe prdnie de Processing qui permet
de crer un chier vido, et de lui ajouter des images au fur et
mesure de l'excution de votre programme. Pour pouvoir l'utiliser
dans votre sketch, il faut importer la librairie vido de Processing :
141
Finaliser la vido
A ce stade, l'enregistrement de la vido se termine lorsque l'on
quitte le programme. On peut indiquer l'objet M o vieM aker d'arrter
l'enregistrement tout moment. Dans notre exemple, nous allons
ajouter une action qui stoppe l'enregistrement vido lorsqu'on
appuie sur n'importe quelle touche du clavier de votre ordinateur.
vo id keyPressed() {
m m .finish();
}
Personnaliser l'enregistrement
Par dfaut, l'objet M o vieM aker enregistre une vido non compresse
15 images par seconde. Pour des applications interactives
ncessitant un temps de raction trs rapide de l'ordinateur, cette
qualit d'enregistrement peut s'avrer trop lourde. A l'inverse, pour
d'autres types de cration, on peut avoir besoin de produire des
vidos encore plus uides (comportant davantage d'images par
seconde). Avec l'objet M o vieM aker , il est possible de personnaliser les
caractristiques de l'enregistrement en prcisant notamment un
format particulier ainsi que le nombre d'images par seconde.
Les paramtres sont les suivants :
Une rfrence au sketch
La largeur de la vido
La hauteur de la vido
Le nom du fichier de sortie
Nombre d'images par seconde
Codec de compression
Qualit
m m = new M o vieM aker(this, width, height, "sketch.m o v", 30,
M o vieM aker.H263, M o vieM aker.HIG H);
142
143
INTERAGIR
144
Actions
La valeur de la dernire touche appuye est stocke dans la variable
, 'b' , 'c' , ... Attention, key est sensible la casse, c'est--dire qu'il
fait une diffrence entre les minuscules et majuscules.
'a'
vo id draw() {
backgro und(204);
fill(0);
textSize(70);
text(key,30,70);
}
145
int y = 0;
vo id setup () {
size(130,200);
textSize(80);
stro ke(0);
fill(0);
}
vo id draw() {
backgro und(204);
line(10,100,120,100);
text(key,35,y);
}
vo id keyPressed(){
y = 180;
}
vo id keyReleased(){
y = 80;
}
Touches spciales
Les touches spciales comme les ches (U P , D O WN , LEFT, RIG HT) ou ALT,
CO N TRO L , SHIFT sont quant elles stockes dans la variable keyCo de . Le
test if (key == CO D ED ) permet de vrier si la touche appuye est une
touche spciale ou non. Dans un programme, il faudra distinguer les
deux cas en fonction du type de touche appuye que l'on veut tester.
Dans l'exemple suivant, nous allons crer une machine crire un
peu particulire, puisqu'il sera possible de dplacer le texte grce aux
flches.
A chaque fois qu'une touche sera appuye, elle sera stocke dans
une chane de caractre, pour pouvoir tre ache dans le draw()
l'aide de la mthode text() .
146
String s = "";
int x = 50;
int y = 50;
vo id setup () {
size(200,200);
}
vo id draw() {
backgro und(255);
fill(0);
text(s, x, y);
}
vo id keyPressed() {
if (key == CO D ED ){
if (keyCo de == LEFT)
x = x + 1;
= x - 1;
if (keyCo de == U P)
y = y - 1;
if (keyCo de == D O WN )
y = y + 1;
}
else {
s = s + key;
}
}
147
vo id draw()
{
rectM o de(CEN TER);
backgro und(128);
if (keyPressed == true)
{
if (key == 'c') {
ellip se(50,50,90,90);
}
else if (key == 'r') {
rect(50,50,90,90);
}
}
}
148
Position de la souris
Les coordonnes de la souris dans la fentre sont accessibles par les
deux variables m o useX
et m o useY, disponibles par dfaut dans
Processing. Elles permettent de connatre la position de la souris
par rapport notre fentre de dessin, en prenant pour origine le
coin gauche suprieur de la fentre. Dans l'exemple suivant, nous
allons crer un programme qui va dessiner un cercle partir de la
position de la souris.
vo id setup () {
size(200,200);
sm o o th();
}
vo id draw() {
ellip se(m o useX,m o useY,15,15);
}
149
vo id setup () {
size(300,300);
sm o o th();
}
vo id draw() {
flo at r = r a n d o m ( 3 , 3 0 ) ;
ellip se(m o useX,m o useY,r ,r );
}
Clics de souris
Nous pouvons intercepter les clics de souris grce aux mthodes
m o usePressed() et m o useReleased() .
Ces deux mthodes permettent de savoir si l'utilisateur a appuy ou
relch un des boutons de la souris. Reprenons l'exemple prcdent
en changeant la couleur de remplissage de notre cercle lorsque
l'utilisateur appuie sur un des boutons de la souris. Nous allons
choisir un niveau de gris pris au hasard au moment du clic que nous
appliquerons au cercle l'aide de la commande fill() .
150
vo id setup () {
size(200,200);
sm o o th();
}
vo id draw() {
backgro und(255);
151
ellip se(100,100,200,200);
}
vo id m o usePressed() {
if (m o useB utto n == LEFT)
fill(0);
fill(255);
Autres vnements
Processing permet de capter deux autres vnements souris,
notamment lorsqu'elle est en mouvement au-dessus de la fentre.
va permettre de dtecter le mouvement de la souris
lorsque celle-ci se dplace au dessus de la fentre de dessin. Si le
pointeur de souris sort de la zone de la fentre ou s'il ne bouge plus,
alors la mthode n'est plus appele.
m o useM o ved()
int r = 100;
int c = 100;
vo id setup () {
size(255, 255);
sm o o th();
}
vo id draw() {
backgro und(255);
fill(c);
ellip se(width/2, height/2, r, r);
152
}
vo id m o useM o ved() {
c = m o useY;
}
vo id m o useD ragged() {
r = m o useX;
}
Curseur
Parfois il est bien pratique de cacher le curseur de la souris, par
exemple dans le cas d'une installation artistique o le pointeur
pourrait venir malencontreusement parasiter l'achage de votre
animation. Dans Processing, il existe fort heureusement une
instruction pour masquer le pointeur :
no Curso r();
vo id setup () {
fill(255);
rect(10, 10, 20, 80);
fill(175);
rect(40, 10, 20, 80);
fill(100);
rect(70, 10, 20, 80);
}
vo id draw() {
// N o us vrifio ns si o n survo le un des 3 rectangles
// et m o difio ns le curseur en co nsquence
if (m o useX > 10 & & m o useX < 30 & & m o useY > 10 & & m o useY < 90) {
c u r s o r ( H A N D ) ; // Affiche une m ain
}
else
if (m o useX > 40 & & m o useX < 60 & & m o useY > 10 & & m o useY < 90) {
c u r s o r ( A R R O W ) ; // Affiche une flche
}
else
if (m o useX > 70 & & m o useX < 90 & & m o useY > 10 & & m o useY < 90) {
c u r s o r ( W A I T) ; // Affiche un sablier
}
else {
c u r s o r ( C R O S S ) ; // Affiche une cro ix si o n ne survo le rien
}
153
154
L'entre Microphone
Si votre sketch peut tre programm pour tre sensible l'appui
d'une touche du clavier ou au clic de la souris, ce n'est pas la seule
forme d'interactivit oerte par Processing. Vous pouvez galement
donner votre programme le sens de l'oue en vous servant d'un
microphone comme oreille et en faisant correspondre des actions
du sketch certains paramtres du son capt.
Nous allons tout d'abord rappeler certaines notions abordes dans
le chapitre consacr la lecture du son pour ensuite nous
concentrer plus spciquement sur l'ajout d'une source sonore
l'aide d'un microphone.
Minim
Il a t dcid un moment donn d'intgrer dans toute distribution
Processing la bibliothque audio Minim pour pouvoir jouer au moins
des chiers audio ou capter le son entrant par le microphone. A
priori cette bibliothque (galement appel librairie en jargon
informatique) est dj installe sur votre ordinateur. Pour vrier sa
prsence et l'intgrer dans votre programme, il sut d'aller dans le
menu Sketch > Import Library... > Minim audio.
155
Configurer minim
Le lancement de notre sketch l'aide du bouton Run ne sut pas
pour jouer un son. Au pralable, il faut prvoir d'activer les
fonctionnalits de gestion audio de Minim (son moteur audio en
jargon informatique). Pour jouer un son, Minim doit en eet
auparavant demander un accs la carte son de votre ordinateur.
Ne vous inquitez pas, Minim s'occupe de toute cette cuisine interne
pour vous, il sut de lui dire de s'activer pour cela. Le fait d'avoir
activ Minim suppose de prvoir de le dsactiver la n de notre
programme.
Si vous ne comprenez pas tout ce que nous venons de dire, ce n'est
pas trop grave. Sachez simplement qu'il faut saisir le code suivant au
dbut de chaque programme utilisant M inim :
im p o rt ddf.m inim .*;
M inim m inim ;
vo id setup () {
m inim = new M inim (this);
}
156
Un petit jeu
Nous allons prsent crer un jeu trs simple qui va exploiter
davantage les possibilits d'interaction avec un microphone. Le jeu
sera compos d'une balle partant de la gauche de l'cran et qui subit
une force d'attraction lente, mais permanente vers cette partie de
l'espace de dessin. En faisant du bruit, l'utilisateur va la pousser vers
la droite, son but tant de passer la ligne d'arrive.
Pour commencer, nous allons changer la taille de notre fentre de
visualisation de l'espace de dessin, activer le lissage du trac et
dnir le contour des formes en lui appliquant la couleur blanche. Le
code concern est signal en gras.
vo id setup () {
s iz e ( 6 0 0 , 1 0 0 ) ;
sm o o th();
stro ke(255);
m inim = new M inim (this);
in
157
Pour viter que la balle ne sorte de l'cran, nous allons ajouter deux
conditions qui vont corriger sa position si la variable ballX est plus
petite que 0 ou plus grande que la largeur du sketch.
vo id draw() {
backgro und(0);
ballX = ballX + in.m ix.level()*20;
if ( b a llX < 0 ) {
b a llX = 0 ;
}
if ( b a llX > w id t h - 2 5 ) {
b a llX = w id t h - 2 5 ;
}
ellip se(25+ballX, height-25, 50, 50);
}
Nous allons ajouter une ligne d'arrive ainsi qu'une condition qui
spcifie que si la balle l'a franchi, elle change de couleur.
vo id draw() {
backgro und(0);
ballX = ballX + in.m ix.level()*20;
if (ballX < 0) {
ballX = 0;
}
if (ballX > width-25) {
ballX = width-25;
}
if ( b a llX > 5 0 0 ) {
f ill( 2 5 5 , 0 , 0 ) ;
} e ls e {
f ill( 2 5 5 ) ;
}
158
lin e ( 5 0 0 , 0 , 5 0 0 , 1 0 0 ) ;
ellip se(25+ballX, height-25, 50, 50);
}
159
L'entre vido
Processing permet de capturer les images provenant d'une camra
vido connecte votre ordinateur par un cble ou distance via le
Wi ou mme Internet. Ces images peuvent ensuite tre aches
dans la fentre de visualisation de votre sketch et le cas chant,
modies en fonction de vos besoins. Les applications cratives de
l'entre vido sont multiples.
Ensuite nous allons dclarer une variable qui stockera notre objet
Cam era . Dans la mthode setup () , il faut prciser laquelle des camras
prsentes sera utilise. Notez que vous devez dj avoir connect et
installer cette camra vido sur votre ordinateur pour faire
fonctionner cet extrait de code. Si le code gnre une erreur au
moment de crer la camra, essayez d'autres numros de devices[].
Cap ture cam era;
vo id setup () {
size(640, 480);
backgro und(0);
String[] devices = Cap ture.list();
p rintln(devices);
cam era = new Cap ture(this, 320, 240, devices[0]);
}
160
161
vo id draw() {
if (cam era.available()) {
cam era.read();
cam era.filter(IN VERT);
im age(cam era, 160, 100);
}
}
162
ANNEXES
163
Les astuces
Pour vous viter certaines erreurs de base et aller plus loin dans
l'utilisation de Processing, ce chapitre prsente plusieurs astuces et
morceaux de code qui permettent de rsoudre une srie de
problmes frquemment rencontrs. N'hsitez pas les utiliser
dans vos programmes.
Augmenter la mmoire
Si vous crez des sketchs qui utilisent de la vido, de nombreuses
images ou qui travaillent avec des donnes volumineuses, il peut
arriver que votre programme gnre une erreur pour cause de
mmoire insusante. Voici l'erreur ache par Processing dans la
console.
164
165
166
vo id setup () {
intervalo m etre = new Intervalo m etre(100);
}
vo id draw() {
if (intervalo m etre.verifierIntervalle()) {
rect(rando m (0, width), rando m (0, height), 10, 10);
}
}
Quitter le programme
Pour quitter un programme en utilisant du code plutt qu'une
intervention utilisateur, vous pouvez appeler la mthode exit() .
// Vo us p o uvez ajo uter ce co de l'exem p le p rcdent
else if (key == 'e' || key =='E') {
exit(); // o n quitte le p ro gram m e
}
167
Unexpected token
Cette erreur se produit frquemment lorsque vous oubliez un ;
en n de ligne ou que vous n'avez pas correctement ferm un bloc
d'accolades. Le programme voit une instruction qui fait deux lignes
et dont la syntaxe est par consquent errone.
int no m breEntier
= 1
= 1;
168
}
v o id s e t u p ( ) {
}
ArithmeticException: / by zero
int diviseur = 0;
p rintln(1 / diviseur);
ArrayIndexOutOfBoundsException
Cette erreur survient lorsque vous tentez d'accder un lment en
dehors des limites d'un tableau. Dans l'exemple suivant, le tableau
une taille de 3 (case 0, 1 et 2) et nous essayons d'accder la case 4.
int[] no m bres = new int[3];
no m bres[0] = 1;
no m bres[1] = 20;
no m bres[2] = 5;
p rintln(no m bres[4]);
169
NullPointerException
Cette erreur se produit lorsque vous tentez d'accder un lment
qui n'existe pas en mmoire. Par exemple en essayant d'accder un
objet qui n'a pas encore t initialis.
B alle m aB alle;
vo id setup () {
m aB alle.x = 10;
}
class B alle {
int x;
int y;
}
170
l'adresse
suivante
:
http://processing.org/reference/libraries/.
installer
une
librairie
que
nous
171
Essayer un exemple
Une bonne librairie fournit galement une documentation de
chacune des fonctionnalits et instructions oertes (classes,
mthodes et attributs). Elle comporte galement le plus souvent
des exemples. Si c'est le cas, il sut d'y accder en parcourant le
menu File > Sketchbook > Examples. Le nom de notre librairie
devrait s'y trouver. Notez que cette procdure fonctionne
uniquement sur Mac OS X et Windows. Sur GNU/Linux, les exemples
des librairies installes par nous-mmes ne s'achent pas dans ce
menu.
172
173
174
La documentation en ligne
Le site web de Processing propose de nombreux contenus pour
dbuter : tutoriaux, exemples de programmes, etc. On y trouve
galement une page listant l'ensemble des instructions
informatiques (mthodes) utilises par ce logiciel : leur
fonctionnement y est dcrit prcisment et illustr par des
exemples. D'autres sources d'information trs utiles existent sur
Internet.
Les tutoriaux
La
section
"learning"
du
site
de
Processing
(http://www.processing.org/learning/) propose deux types de
contenus : un apprentissage du logiciel pas pas travers des
exemples basiques et une srie de codes plus complets qui illustrent
des cas pratiques.
Les rfrences
La
section
"reference"
du
site
(http://www.processing.org/reference/) propose une liste complte
des mthodes disponibles sous Processing. Elles sont regroupes
par thme. Chacune d'elles est dcrite au moyen d'un visuel et d'un
texte prcisant notamment sa syntaxe et la liste de ses arguments.
Dans ces pages de rfrence, ce sont d'ailleurs les rubriques Syntax
e t Parameters qui sont les plus intressantes. Elles permettent de
savoir ce qu'il faut mettre dans les ( ) pour faire fonctionner la
mthode et sa syntaxe.
Vous pouvez aussi accder aux rfrences directement depuis
l'environnement de Processing. Pour ce faire, au niveau de la fentre
d'dition du logiciel, slectionnez une instruction dont vous
souhaitez connatre davantage la syntaxe et les fonctionnalits
(attention le mot recherch doit tre slectionn en entier) puis
cliquez dans le menu Help > Find in Reference. Vous pouvez
galement eectuer cette opration avec le raccourci clavier CT RL
+ MAJ + F (Windows & Linux) ou MAJ + CMD + F (Mac Os).
175
Le forum de processing.org
Le forum du site Processing (http://forum.processing.org/) constitue
une autre source d'aide et de contribution. De nombreuses
personnes l'utilisent pour exposer leurs problmes et obtenir des
rponses. On y trouve aussi de nombreux morceaux de code que
vous pourrez intgrer vos programmes.
Mentionnons
galement
le
site
OpenProcessing
(http://www.openprocessing.org) qui propose galement un espace
de partage de morceaux de code entre utilisateurs.
Namur)
:
http://www.multimedialab.be/cours/logiciels/processing.ht
m
Cours en ligne de Stphane Nol (Ecole de Recherche
Graphique - ERG et Ecole Suprieure des Arts - ESA
Bruxelles)
: http://arts-numeriques.codedrops.net/-CodeProcessing-?
PHPSESSID=a75396a479ef2ce4a6cb08f85c1602be
Cours en ligne de Jean-Paul Roy (Universit de Nice):
http://deptinfo.unice.fr/~roy/Java/L1/L1Java.html
176
Processing
l'enseignement
dans
Lenvers du dcor
Les outils numriques de cration sont devenus trs prsents sinon
majoritaires dans la pratique de nombre de cratifs aujourdhui, et il
en est de mme pour les tudiants. Les initier la programmation
avec pour objet la cration visuelle ou graphique, cest leur faire
apprhender concrtement la nature de limage numrique ainsi que
les transformations quelle subit lors de ses multiples traitements
par les algorithmes des ordinateurs. Les faire programmer, cest
leur montrer lenvers du dcor.
Par ailleurs, les grands logiciels propritaires sont massivement
utiliss et enseigns dans les coles, sans forcment susciter un
accompagnement critique ni une rexion sur ces derniers. Initier
les tudiants la programmation, cest aussi rendre possible un
questionnement sur leurs autres pratiques de cration numrique en
favorisant une mise en perspective.
177
178
179
Arduino
Arduino est une plate-forme libre de cration d'objets lectroniques
des ns artistiques, ducatives ou de recherche via la conception
de prototypes. Elle repose sur l'utilisation d'un circuit lectronique
(un
mini-ordinateur,
appel
galement micro-contrleur)
comportant des entres et sorties (des ports) sur lesquelles on peut
brancher diffrents appareils :
ct entres, des capteurs, appareils qui collectent des
informations sur leur environnement comme la variation de
temprature via une sonde thermique, le mouvement via un
dtecteur de prsence, le contact via un bouton poussoir,
etc.,
ct sorties, des actuateurs, des appareils qui agissent
sur le monde physique, telle une petite lampe qui produit de
la lumire, un moteur qui actionne un bras articul, etc.
Arduino comporte galement un environnement de dveloppement
logiciel calqu sur celui-ci de Processing, qui permet de programmer
le circuit lectronique. Arduino tant un projet driv de Processing,
il apparat donc comme une ouverture logique la cration
interactive. Une fois que vous matrisez Processing, Arduino vous
sera dj familier.
L'appareil Arduino
180
Le logiciel Arduino
181
La communication srielle
Les ordinateurs communiquent entre eux l'aide d'impulsions
lectriques travers des ls. Les impulsions sont envoyes les unes
aprs les autres, dans une srie de bits. Un bit peut tre soit vrai, soit
faux. C'est le chire un ou zro. Les bits sont souvent groups en
paquets de huit. On appelle ces paquets des octets. Un caractre de
texte utilisant le jeu de caractres ASCII est exprim sur huit bits.
Pour pouvoir changer ces informations sous forme de bits avec
l'extrieur, votre ordinateur utilise une ou plusieurs entres
physiques (des ports en jargon informatique) lui permettant de se
connecter des appareils priphriques (imprimante, souris, clavier,
modem, etc.).
Tout cela pour vous dire que les impulsions lectriques et les
instructions informatiques ne sont pas si loignes que cela dans un
ordinateur et qu'il est possible de communiquer facilement avec un
Arduino l'aide de simples caractres textuels.
182
// ...o u 1, 2, 3...
vo id setup () {
size(200, 150);
p rintln("Liste des p o rts: \n" + Serial.list());
String no m _du_p o rt = Serial.list()[num ero _du_p o rt];
m o n_p o rt = new Serial(this, no m _du_p o rt, 9600);
}
vo id draw() {
if (m o n_p o rt.available() != 0) {
// Co nversio n du int en char
dernier_recu = char(m o n_p o rt.read());
}
backgro und(231);
fill(0);
text("D ernier o ctet reu: " + dernier_recu, 10, 50);
text("D ernier o ctet envo y: " + dernier_envo ye, 10, 70);
int largeur = int(dernier_recu - 'a');
int m ultip licateur = 5;
stro ke(0);
no Fill();
rect(10, 90, 26 * m ultip licateur, 10);
no Stro ke();
fill(0);
rect(10, 90, largeur * m ultip licateur, 10);
}
vo id keyPressed() {
if (key == ' ') {
m o n_p o rt.write('1');
dernier_envo ye = '1';
}
}
183
vo id keyReleased() {
if (key == ' ') {
m o n_p o rt.write('0');
dernier_envo ye = '0';
}
}
184
char o ctet_recu;
if (Serial.available() > 0) {
// Liso ns ce que l'o n reo it via le sriel
o ctet_recu = Serial.read();
if (o ctet_recu == '1') {
digitalWrite(so rtie_num erique, HIG H);
} else {
digitalWrite(so rtie_num erique, LO W);
}
}
// Lecture de l'entre analo gique 0:
valeur_cap tee = analo gRead(entree_analo gique);
char envo yer = 'a' + m ap (valeur_cap tee, 0, 1023, 0, 25);
Serial.p rint(envo yer);
// O n attend un p eu p o ur laisser le tem p s au AD C de resp irer
delay(10);
}
Une fois que le code pour l'Arduino est install sur l'appareil,
branchez-le en USB sur votre ordinateur, si ce n'est dj fait, et
dmarrez le sketch Processing. Vrier dans le menu Arduino >
Tools que les congurations de Board et Serial Port sont
correctes. Lorsque la fentre du sketch est ouverte dans Processing
et que vous appuyez sur la barre d'espacement, la LED associe la
sortie 13 (intgre la plaquette Arduino) devrait s'allumer comme
suit :
En rajoutant :
p rintln(dernier_recu);
...dans le vo id
l'accolade :
draw()
...
rect(10, 90, largeur * m ultip licateur, 10);
p r in t ln ( d e r n ie r _ r e c u ) ;
}
185
En savoir plus
Pour en savoir plus sur Arduino, nous vous invitons consulter le
manuel en franais consultable librement sur la plateforme
Flossmanuals : http://fr.flossmanuals.net/arduino/
186
A propos de ce manuel
La philosophie du libre inspire la rdaction et la diusion de ce
manuel d'initiation Processing, l'objectif tant la fois :
d'orir un public dbutant francophone les bases
d'utilisation de Processing,
valoriser la communaut des dveloppeurs et experts
francophones de Processing impliqus dans la rdaction et
l'actualisation de ce manuel en franais,
fdrer plus largement la communaut francophone de
Processing autour d'un projet commun de documentation
(tant au niveau des co-auteurs que des commentateurs),
sachant que l'ouvrage dans sa forme accessible en ligne
(wiki) peut tre amlior et comporter de nouveaux
chapitres, notamment l'occasion de la parution d'une
nouvelle version de Processing.
Un ouvrage collectif
Production originale en franais, ce manuel est vivant : il volue au
fur et mesure des contributions. Pour consulter la dernire version
actualise, nous vous invitons visiter rgulirement le volet
francophone de Flossmanuals sur le site http://fr.flossmanuals.net
et plus particulirement sur la page d'accueil du manuel
http://fr.flossmanuals.net/processing/.
Le coeur du manuel d'environ 270 pages a t ralis en 5 jours dans
le cadre d'un Booksprint qui s'est tenu Paris du 6 au 10 septembre
2010 l'initiative et avec le soutien de l'Organisation internationale
de la Francophonie (www.francophonie.org).
Exprimente et popularise par la Floss Manuals Fondation dans le
cadre de ses activits de cration de manuels multilingues sur les
logiciels et pratiques libres, la mthodologie du Booksprint permet
de rdiger en un temps trs court des livres de qualit. Un groupe de
6 experts francophones de Processing originaires d'Amrique du
Nord, d'Europe et d'Afrique se sont retrouvs dans un mme lieu
pour rdiger ce manuel. Lusage de la plate-forme de co-rdaction
en ligne a permis galement d'autres personnes intresses de
sassocier distance lexprience.
187
188
189
Glossaire
Ce chapitre prsente les dnitions d'une srie de termes techniques
lis Processing, la programmation ou aux techniques de dessin,
d'animation et d'interaction.
Applet
En Java, un applet (ou une appliquette) est un programme que l'on
peut intgrer dans une page web. En exportant votre sketch sous
cette forme, Processing permet d'excuter votre dessin, animation,
jeu interactif, etc. de manire autonome sur la page d'un site
internet.
Application
Voir programme.
Arduino
Arduino est une plate-forme libre de cration d'objets lectroniques
compose d'un appareil d'entre-sortie congurable (dnomm un
micro-contrleur) et d'un environnement de programmation. Cet
environnement est driv de celui de Processing et il est possible
d'excuter des sketchs sur ce type d'appareils programmables. Voir
aussi Communiquant (objet).
Argument
Voir paramtres.
Assignation
Une assignation dsigne le fait d'attribuer une valeur une variable.
On utilise l'oprateur = pour attribuer une valeur une variable.
Attribut
Un attribut, c'est une variable qui appartient une classe ou un
objet.
Bloc
Un bloc, dsign par deux accolades { } est un groupement
d'instructions qui seront excutes ensemble. Elles sont utilises
pour dlimiter les conditions, les boucles, les mthodes et les
classes.
190
Boolen
Le boolen est un type de variable qui peut tre vrai ou faux. Il
permet de tester des conditions.
Boucle
Une boucle est un bloc dont les instructions vont tre excutes
plusieurs fois la suite soit selon un nombre prdni de fois soit
selon une condition. Les instructions fo r et while permettent de
raliser des boucles. Chaque tape d'une rptition est appele
itration.
Classe
Une classe est un modle qui sert crer des objets, ceux-ci
partagent un ensemble de mthodes et d'attributs. Chaque objet
cr selon ce modle s'appelle une instance de cette classe. Les
objets sont des variables comme les autres. Leur type, c'est le nom
de la classe dont ils sont une instance. Vous n'avez rien compris ?
Rassurez-vous ! Le plus simple est d'aller lire le chapitre intitul
Les objets du manuel.
Commentaire
Un commentaire est une instruction qui sera ignore par l'ordinateur
au moment de l'excution du programme. Elle permet au
programmeur d'ajouter des notes dans son code an de le rendre
davantage clair : cette mthode facilite la comprhension ultrieure
du programme en prcisant l'utilit de telle ou telle variable,
mthode, etc.
Communiquant (objet)
Objet technologique dont la fonction est de faire transiter des
informations entre le monde physique, le monde des objets et les
tres vivants. Dans le cadre de ce manuel, ce terme s'applique
notamment des objets conus partir de petits circuits
lectroniques autonomes chargs de capter des informations sur
leur environnement (mouvement, chaleur, contact...), de les
transmettre et ventuellement de ragir en excutant des actions.
Voir aussi Arduino.
Concatnation
La concatnation est une opration qui consiste assembler
plusieurs variables (texte, nombre, etc.) en une seule chane de
caractre. On utilise le symbole + pour concatner des
variables.
191
Condition
Les conditions permettent d'excuter une srie d'instructions de
manire conditionnelle aprs qu'une instruction ait t valide ou
non.
Console
La console est la zone situe en bas de la fentre de
l'environnement de dveloppement (la fentre d'dition) de
Processing. Elle permet d'acher du texte des ns de test et de
correction d'erreurs (dbogage) pendant que notre programme
fonctionne.
Constructeur
Dans le jargon informatique, ce terme s'applique la notion de
classe en programmation. Le constructeur est une mthode portant
le mme nom que la classe invoque lorsqu'on cre une instance de
cette classe. Cette dnition vous semble obscure ? Rassurez-vous !
Le plus simple est d'aller lire le chapitre intitul Les objets du
manuel.
Contour
Le contour (mthode stro ke() ) dnit la couleur utilise pour dessiner
la bordure d'une forme gomtrique.
Coordonnes
Les coordonnes servent reprsenter la position d'un point ou d'un
objet dans l'espace sur les axes x, y, et parfois z de l'espace de
dessin.
Dboguer, dbogage
Ce terme dsigne l'action de tester un programme et d'en liminer
les erreurs et les fonctionnements inadquats. On distingue deux
tapes : la suppression des erreurs de syntaxe, de langage et fautes
de frappe qui empchent l'excution du programme ; la correction
de la logique du programme et le traitement des cas de gure non
prvus initialement.
Dclaration
La dclaration d'une variable consiste rserver un espace mmoire
par un nom pour un type donn. Une dclaration et une assignation
peuvent tre combines.
192
Espace colorimtrique
Un espace colorimtrique est une manire de grer la dnition des
couleurs. Par dfaut Processing utilise le mode RVB (rouge, vert,
bleu), mais ore aussi l'usage du mode T SV (teinte, saturation,
valeur).
Folioscope
Un folioscope est une squence d'images imprimes et relies sous
forme de livret qui peuvent tre vues en squence anime lorsque
l'on tourne les pages rapidement avec son pouce. Par analogie cela
dsigne les animations images par image. En anglais, on utilise le
terme flipbook.
Fonction
Une fonction est comme une mthode, mais l'extrieur d'une
classe. tant donn qu'en Java, on ne peut pas dnir de fonction,
nous avons vit ce terme dans ce manuel. Cependant, ce terme est
beaucoup utilis sur le site Web de Processing, car le sketch se
trouve en fait l'intrieur d'une classe que nous ne voyons pas. Voir
mthode.
Hexadcimal
La notation hexadcimale est une manire de noter les chires en
base 16. Dans cette notation, les chires suprieurs 9 sont
reprsents au moyen de lettres. On l'utilise notamment pour
reprsenter des couleurs pour le Web.
Incrmentation
Ajouter 1 la valeur d'une variable de type int .
Instance
Une instance est un objet. Voir objet.
Instruction
Une instruction est un ensemble de mthodes et/ou d'oprations
mathmatiques, etc. destin eectuer une tche. En gnral, on
aura une instruction par ligne. Une instruction se termine toujours
par un ; .
Itration
Voir boucle.
193
Java
Java est un langage de programmation orient objet dvelopp
l'origine par Sun Microsystems. Il a la particularit d'utiliser une
machine virtuelle ce qui le rend utilisable sur de nombreuses
plateformes sans ncessiter d'adaptations. Il est publi sous licence
GNU GPL. Processing utilise le langage Java.
Librairie
Une librairie est un ensemble de classes qui sont runies dans un
fichier afin d'tre utilisables dans plusieurs sketchs.
Lissage
Le lissage est une technique qui permet d'liminer les eets
d'escaliers qui apparaissent lorsqu'on dessine des lignes diagonales
ou des courbes.
Liste
Une liste est un ensemble de donnes d'une certaine taille
regroupes dans une mme variable. Les valeurs sont places l'une
aprs l'autre. Chaque donne est identie par un numro,
commenant par 0, qui rend son accs ais.
Mthode
Une mthode est un ensemble d'instructions regroupes dans un
mme bloc de code et accessibles par un simple mot cl.
Modulo
Le modulo est une opration qui permet d'obtenir le reste de la
division euclidienne de deux nombres. Par exemple le reste de la
division de 11 par 3 est 2 (11 / 3 = 3, reste 2). De manire plus
gnrale, si on prend deux nombres x et y, le reste de la division de x
par y est strictement infrieur y. L'oprateur modulo permet de
compter sans jamais dpasser un certain nombre (la base du
modulo). Ainsi, vous pouvez avoir besoin de crer des animations
cycliques dont la frquence (le nombre d'animations par cycle)
s'adapte en fonction d'autres lments, par exemple la taille de la
fentre de visualisation de l'espace de dessin. Pour dterminer
partir d'une valeur donne ce nombre d'animations par cycle, la
solution la plus simple consiste utiliser l'oprateur modulo % .
194
Objet
Dans le jargon informatique, un objet est une variable, qui est
l'instance d'une classe. Un objet peut avoir des attributs et des
mthodes. Les noms de ces attributs et mthodes sont les mmes
pour toutes les instances de cette classe, mais chaque objet peut
avoir des valeurs direntes pour ses attributs. Vous n'avez rien
compris ? Rassurez-vous ! Le plus simple est d'aller lire le chapitre
intitul Les objets du manuel.
OpenGL
OpenGL est une librairie graphique 2D/3D capable d'exploiter les
ressources d'une carte graphique pour augmenter les performances.
Processing peut au besoin utiliser cette technologie.
P3D
P3D est le mode de reprsentation 3D de base de Processing. Il est
plus lent qu'OpenGL, mais plus simple d'utilisation et plus facile
faire fonctionner sur dirents types de systmes d'exploitation
(Linux, OS X, Windows, etc.).
Paramtre
Les paramtres d'une mthode sont des valeurs d'entre qu'on
fournit la mthode et qu'elle utilise en interne pour eectuer des
actions.
Programme
Un programme est un ensemble d'instructions informatiques et de
ressources (chiers images, sons, textes, etc.) qui forme un tout et
qui excute une srie d'actions prdnies dont le rsultat peut tre
visuel, sonore, interactif, etc. Sketch est le nom donn un
programme dans Processing.
Remplissage
La couleur de remplissage est la couleur utilise pour dessiner
l'intrieur des formes gomtriques. On la spcie en appelant la
mthode fill() .
Srie
Le port srie sert connecter votre ordinateur un certain nombre
d'appareils priphriques. Votre ordinateur change des
informations avec ce matriel externe en envoyant des sries
d'instructions sous forme de bytes.
195
Sketch
Sketch est le nom donn un programme dans Processing.
Tableau
Voir liste
Test
Un test est une opration qui consiste comparer deux valeurs et
dterminer si elles sont gales, plus petites ou plus grandes l'une
par rapport l'autre. On utilise les tests dans les conditions et dans
les boucles. On utilise les oprateurs == , < et > pour faire des tests.
Timer
En jargon informatique, un timer dsigne un systme (objet physique
ou simple code informatique) qui excute une action intervalle
rgulier.
Transformation
Une transformation gomtrique est une modification de la position,
de la rotation ou de l'chelle d'un lment du dessin (ligne,
rectangle, cercle, etc.). Elle s'eectue avant l'opration de dessin de
l'lment.
Tween
En animation, un tween dsigne l'action de calculer les positions
intermdiaires entre deux points d'une animation. Ce mot provient
de l'anglais in between.
Radian
Le radian est une unit de mesure d'angle utilise pour les calculs de
trigonomtrie. Toutes les mthodes de calcul d'angle de Processing
fonctionnent avec cette unit. Un cercle complet (360) vaut 2 x PI,
soit environ 6,2831. La mthode radians(N O M B RE) permet de convertir
un nombre de degrs en radians.
Variable
Une variable est un espace rserv de la mmoire de l'ordinateur
dans lequel l'utilisateur peut stocker des informations. On lui donne
un nom, un type et une valeur.
196