Sign in Join
Wiki copytemporary

BGRABitmap tutorial 10/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Ce tutoriel montre comment utiliser le plaquage de texture.
22
33### Création d'un nouveau projet
44
55Créez un nouveau projet et ajoutez la référence à [[BGRABitmap]], de la même façon que dans [[BGRABitmap tutorial/fr|le premier tutoriel]].
66
77### Sans placage particulier
88
99Regardez ce qu'il arrive si on dessine un polygone avec une texture en utilisant le placage par défaut :
1010
1111``` pascal
1212procedure TForm1.FormPaint(Sender: TObject);
1313var image: TBGRABitmap;
1414 tex: TBGRABitmap;
1515begin
1616 //fond noir
1717 image := TBGRABitmap.Create(ClientWidth,ClientHeight, BGRABlack );
1818
1919 tex:= TBGRABitmap.Create('image.png'); //charge un image
2020 image.FillPolyAntialias( [PointF(110,10), PointF(250,10), PointF(350,160), PointF(10,160)], tex);
2121 tex.Free;
2222
2323 image.Draw(Canvas,0,0,True); //dessine à l'écran
2424 image.free;
2525end;
2626```
2727
2828### Exécution du programme
2929
3030Vous devriez obtenir quelque chose comme cela :
3131
32-<figure>
33-<img src="BGRATutorial10a.png" title="BGRATutorial10a.png" />
34-<figcaption>BGRATutorial10a.png</figcaption>
35-</figure>
32+![](/wiki-images/7/7e/BGRATutorial10a.png)
3633
3734Comme vous pouvez le voir, l'image n'est pas déformée.
3835
3936### Transformation affine
4037
4138Vous pouvez appliquer une transformation affine comme cela :
4239
4340``` pascal
4441procedure TForm1.PaintImage;
4542var image: TBGRABitmap;
4643 tex: TBGRABitmap;
4744 affine: TBGRAAffineBitmapTransform;
4845
4946begin
5047 //fond noir
5148 image := TBGRABitmap.Create(ClientWidth,ClientHeight, BGRABlack );
5249
5350 tex:= TBGRABitmap.Create('image.png'); //charge une image
5451
5552 //création d'une rotation de 45°
5653 affine := TBGRAAffineBitmapTransform.Create(tex,True);
5754 affine.RotateDeg(45);
5855
5956 //utiliser cette transformation comme paramètre à la place de tex
6057 image.FillPolyAntialias( [PointF(110,10), PointF(250,10), PointF(350,160), PointF(10,160)], affine);
6158
6259 affine.Free;
6360 tex.Free;
6461
6562 image.Draw(Canvas,0,0,True); //dessin à l'écran
6663 image.free;
6764end;
6865```
6966
7067### Exécution du programme
7168
7269Vous devriez obtenir une image tournée à l'intérieur du polygone :
7370
74-<figure>
75-<img src="BGRATutorial10b.png" title="BGRATutorial10b.png" />
76-<figcaption>BGRATutorial10b.png</figcaption>
77-</figure>
71+![](/wiki-images/2/2a/BGRATutorial10b.png)
7872
7973### Placage de texture
8074
8175Maintenant, si vous voulez que la texture soit alignée avec les bords du polygone, vous pouvez utiliser le placage de texture.
8276
8377#### Placage linéaire
8478
8579Le placage linéaire étire l'image le long des bords. Pour faire cela :
8680
8781``` pascal
8882procedure TForm1.PaintImage;
8983var image: TBGRABitmap;
9084 tex: TBGRABitmap;
9185begin
9286 image := TBGRABitmap.Create(ClientWidth,ClientHeight, BGRABlack );
9387
9488 tex:= TBGRABitmap.Create('image.png');
9589 image.FillPolyLinearMapping( [PointF(110,10), PointF(250,10), PointF(350,160), PointF(10,160)], tex,
9690 [PointF(0,0), PointF(tex.width-1,0), PointF(tex.Width-1,tex.Height-1), PointF(0,tex.Height-1)], true);
9791 tex.Free;
9892
9993 image.Draw(Canvas,0,0,True);
10094 image.free;
10195end;
10296```
10397
10498Pour faire le placage, vous utilisez *FillPolyLinearMapping*. De nouveaux paramètres sont apparus. Les coordonnées de la texture définissent, pour chaque sommet du polygone, la position dans la texture. L'option d'interpolation est utilisée pour une meilleure qualité.
10599
106100#### Exécution du programme
107101
108102À présent, la texture est déformée selon la forme polygonale :
109103
110-<figure>
111-<img src="BGRATutorial10c.png" title="BGRATutorial10c.png" />
112-<figcaption>BGRATutorial10c.png</figcaption>
113-</figure>
104+![](/wiki-images/f/f3/BGRATutorial10c.png)
114105
115106#### Placage avec perspective
116107
117108Le placage avec perspective permet de définir pour chaque point sa profondeur.
118109
119110``` pascal
120111procedure TForm1.PaintImage;
121112var image: TBGRABitmap;
122113 tex: TBGRABitmap;
123114begin
124115 image := TBGRABitmap.Create(ClientWidth,ClientHeight, BGRABlack );
125116
126117 tex:= TBGRABitmap.Create('image.png');
127118 image.FillPolyPerspectiveMapping( [PointF(110,10), PointF(250,10), PointF(350,160), PointF(10,160)],
128119 [75, 75, 50, 50],
129120 tex, [PointF(0,0), PointF(tex.width-1,0), PointF(tex.Width-1,tex.Height-1), PointF(0,tex.Height-1)], true);
130121 tex.Free;
131122
132123 image.Draw(Canvas,0,0,True);
133124 image.free;
134125end;
135126```
136127
137128Ici, la profondeur est de 75 pour le haut du polygone et de 50 pour le bas. Cela signifie que le bas est plus proche de l'observateur, comme s'il était horizontal, à la manière d'un plancher.
138129
139130#### Exécution du programme
140131
141132Maintenant, on a l'impression que c'est un polygone en 3D :
142133
143-<figure>
144-<img src="BGRATutorial10d.png" title="BGRATutorial10d.png" />
145-<figcaption>BGRATutorial10d.png</figcaption>
146-</figure>
134+![](/wiki-images/6/67/BGRATutorial10d.png)
147135
148136### Conclusion
149137
150138Avec ces techniques, il est possible de déformer une image, comme dans l'outil "grille de déformation" de LazPaint, ou pour dessiner des objets en 3D avec textures, comme dans les tests 19-21 de *testbgrafunc* (aussi dans l'archive de LazPaint).
151139
152140[[BGRABitmap tutorial 9/fr|Tutoriel précédent (éclairage de phong)]] \| [[BGRABitmap tutorial 11/fr|Tutoriel suivant (combiner les transformations)]]
153141
154142---
155143*From the Free Pascal wiki, page "BGRABitmap tutorial 10/fr", as it stood on 2020-02-09 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history