1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
unit Sprites;
interface
uses tdOpenGL15;
TYPE
TSprite = record
XPos, YPos : Single; // les coordonnées du sprite
Angle : Single; // La rotation du sprite
Width,
Height : single; // Dimensions du Sprite
TextureID : Word; // L'identificateur de la texture
// du sprite
end;
procedure drawSprite(s:TSprite);
implementation
procedure drawSprite(s:TSprite);
begin
(*
On passe au mode matrice MODELVIEW
dans lequel on spécifie les transformations qu'on
veut appliquer aux objets.
On charge l'identité pour que les transformations
qu'on a indiqué avant n'influencent pas cet objet.
*)
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
(*
On spécifie les transformations
glTranslatef(x, y, z) : fait translater les objets à venir
de x unités dans l'axe des x, y unités dans l'axe des y
et z unités dans l'axe des z (pour la 2D, tu n'auras pas besoin de la
composante z (en géneral))
*)
glTranslatef(s.XPos, s.YPos, 0);
(*
glRotatef(angle, x, y, z) : fait tourner les objets à venir
de angle degrés parapport à l'axe (x, y, z).
Pour la 2D, on fait les rotations parapport à l'axe des Z (0,0,1)
*)
glRotatef(s.Angle, 0,0,1);
(*
On indique à OpenGL qu'elle texture utiliser pour habiller les
objets à venir.
le premier paramètre indique que c'est une texture 2D (il y'a 1D et 3D !)
le deuxième est l'ID d'une texture déja enregistré, regarde dans le fichier
textures.pas pour plus de details !
*)
glBindTexture(GL_TEXTURE_2D, s.TextureID);
(*
On va maintenat commencer à dessiner.
On communique les objets qu'on veut dessiner à OpenGL
sous la forme de vertices (points) qui sont encadrés par
un spécificateur de primitive triangles, lignes, rectangles, ...
Pour utiliser les textures, on doit spécifier pour chaque vertex
les coords du pixel de la texture qui sera plaqué sur ce vertex,
OpenGL s'occupe de faire l'interpolation pour habiller toute la forme !
*)
glBegin(GL_QUADS); //Dans ce cas, ce sont des rectangles
glTexCoord2f(0,0); // Les coords du coin inférieur gauche de la texture
glVertex2f(0, 0); // Les coords du coin inférieur gauche de l'objet
glTexCoord2f(1,0); // Les coords du coin inférieur droit de la texture
glVertex2f(s.Width, 0); // Les coords du coin inférieur droit de l'objet
glTexCoord2f(1,1); // Les coords du coin supèrieur droit de la texture
glVertex2f(s.Width, s.Height); // Les coords du coin supèrieur droit de l'objet
glTexCoord2f(0,1); // Les coords du coin supèrieur gauche de la texture
glVertex2f(0, s.Height); // Les coords du coin supèrieur gauche de l'objet
glEnd; // fin de l'objet !
(*
Remarques que les coords des vertices qu'on communique à OpenGL sont constantes,
On dit qu'elle sont dans l'espace Objet, puis, comme tu as spécifié une translation
et une rotation, OpenGL transforme ces vertices, qui seront dorénavant
dans l'espace monde.
à la fin, une autre transformation est appliqué par OpenGL, qui est la projection, pour
que l'on obtient des pixels à l'ecran !
*)
end;
end. |
Partager