Une ligne, ou plutôt devrions nous dire un segment, est tracé à partir de deux points qui représentent chaque extrémité de ce segment. Pour le tracer, nous utilisons la fonction :
SDL_RenderDrawLine(pRendu, x1, y1, x2, y2);
x1 et y1 représente les coordonnées du premier point, x2 et y2 les coordonnées du deuxième. Le choix de la couleur du segment se fait de la même façon que pour un point. On détermine la couleur avec SDL_SetRenderDrawColor() avant de dessiner le segment.
Pour dessiner une ligne brisée, ou un polygone, l'utilisation de la fonction SDL_RenderDrawLine() n'est pas pratique. Nous serions en effet obligé de répéter la fonction pour chaque segment. Heureusement il existe une autre fonction dont la syntaxe est très proche :
int SDL_RenderDrawLines(SDL_Renderer *pRendu, const SDL_Point *tabPoint, int nbPoint);
Le premier argument représente notre pointeur désignant le rendu, le second est un tableau de points, et le dernier précise le nombre de points à utiliser. Le tracé d'un polygone se fait simplement en donnant au premier et au dernier point, les mêmes coordonnées.
Voyons maintenant un exemple complet qui trace des segments en utilisant directement la fonction SDL_RenderDrawLine(), puis qui utilise un tableau de points pour dessiner une courbe (en réalité des segments de droite) en utilisant la fonction SDL_RenderDrawLines() :
#include <iostream>
#include <SDL.h>
using namespace std;
int main(int
argc,
char* argv[])
{
cout <<
"Graphisme avec SDL" <<
endl;
SDL_Window *pFenetre
=
0;
SDL_Renderer *pRendu
=
0;
SDL_Init (SDL_INIT_VIDEO);
pFenetre =
SDL_CreateWindow(
"Graphisme avec SDL",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, 600,
400, SDL_WINDOW_SHOWN);
pRendu =
SDL_CreateRenderer(pFenetre,
-1, SDL_RENDERER_ACCELERATED);
// Dessin du fond noir de la fenêtre
SDL_SetRenderDrawColor(pRendu,
0,
0,
0,
255);
SDL_RenderClear(pRendu);
// Dessin de la courbe en jaune
SDL_SetRenderDrawColor(pRendu,
255,
255,
0,
255);
SDL_Point tabPoint[600];
for(int
i=0;
i<600;
i++)
{
tabPoint[i].x
= i;
tabPoint[i].y
= 200
- (int)(150
*
SDL_sin((double)i
/
47.77));
}
SDL_RenderDrawLines(pRendu,
tabPoint,
600);
// Dessin de la grille blanche
SDL_SetRenderDrawColor(pRendu,
240,
240,
240,
255);
for(int
i=1;
i<12;
i++)
{
SDL_RenderDrawLine(pRendu,
50 * i,
0,
50 * i,
400);
}
for(int
i=1;
i<8;
i++)
{
SDL_RenderDrawLine(pRendu,
0,
50 * i,
600,
50 * i);
}
SDL_RenderPresent(pRendu);
int attendre =
1;
SDL_Event evenement;
// Boucle d'evenements
while(attendre)
{
SDL_WaitEvent(&evenement);
switch(evenement.type)
{
case SDL_QUIT:
attendre =
0;
break;
}
}
SDL_DestroyRenderer(pRendu);
SDL_DestroyWindow(pFenetre);
SDL_Quit ();
return
EXIT_SUCCESS;
}
Voici ce que nous obtenons :