Bonjour à tous, c'est la sixième leçon sur SDL 2 et elle est sortie petite, mais ça vaut le coup. Toutes les leçons sont
ici .
Dans cette leçon, nous allons dessiner un dessin de primitives. Commençons et bienvenue à la leçon
Voyons d'abord ce qu'est une primitive. Une primitive graphique est l'objet géométrique le plus simple affiché sur l'écran d'affichage: un point, un segment de ligne, un rectangle, un arc, un cercle, etc. Dans SDL 2, nous ne pouvons dessiner que des points, des rectangles et des lignes.
Passons au code
#include <SDL2/SDL.h> #include <iostream> using namespace std; int SCREEN_WIDTH = 640; int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Renderer *ren = NULL;
Je ne décrirai pas la déclaration des variables, passons à autre chose.
bool init() { bool ok = true; if (SDL_Init(SDL_INIT_VIDEO) != 0) { cout << "Can't init SDL: " << SDL_GetError() << endl; } win = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { cout << "Can't create window: " << SDL_GetError() << endl; ok = false; } ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED); if (ren == NULL) { cout << "Can't create renderer: " << SDL_GetError() << endl; ok = false; } return ok; }
Dans
Init, initialisez SDL 2, créez une fenêtre et restituez ici aussi, ne vous attardez pas.
Je n'écris pas la fonction
Load , car nous n'avons pas besoin de charger quoi que ce soit.
Dans la fonction
Quitter , nous supprimons simplement la fenêtre, rendons et désinitialisons SDL 2.
void quit() { SDL_DestroyWindow(win); win = NULL; SDL_DestroyRenderer(ren); ren = NULL; SDL_Quit; }
Je vais sauter l'appel à la fonction
Init et passer à la partie la plus intéressante. Pour dessiner un rectangle, nous devons créer un objet de type
SDL_Rect . Ses coordonnées et ses dimensions sont nécessaires pour le dessin.
Un peu sur
SDL_Rect : ce type de données est un tableau de 4 nombres:
x ,
y ,
w et
h - dans cet ordre. Autrement dit, ce code:
SDL_Rect rect = {1, 1, 1, 1}; - complètement correct.
Ceci complète la théorie sur
SDL_Rect, commençons à écrire du code.
SDL_SetRenderDrawColor(ren, 0x00, 0x00, 0x00, 0x00); SDL_RenderClear(ren); SDL_SetRenderDrawColor(ren, 0xFF, 0xFF, 0xFF, 0xFF); SDL_Rect rect1 = {10, 10, 50, 50}; SDL_RenderFillRect(ren, &rect1);
Ici, on nous a dit que le rendu devait être peint en noir et rempli de toute la fenêtre. Après cela, ils ont dit de peindre en blanc. Ensuite, nous avons créé un rectangle avec des coordonnées (10; 10) et des dimensions 50x50. La fonction
SDL_RenderFillRect dessine un rectangle.
Dessiner uniquement le contour du rectangle n'est pas très différent.
SDL_Rect rect2 = {70, 10, 50, 50}; SDL_RenderDrawRect(ren, &rect2);
Nous avons créé un rectangle et appelé la fonction
SDL_RenderDrawRect . Elle dessine uniquement le contour du rectangle à l'écran.
L'étape suivante consiste à tracer une ligne.
SDL_RenderDrawLine(ren, 10, 70, 640 - 10, 70);
Un rectangle n'est pas nécessaire pour tracer une ligne. La fonction
SDL_RenderDrawLine accepte des valeurs de rendu et quatre coordonnées. Ce sont les coordonnées du point de départ et du point d'arrivée. J'ai décidé de tracer une ligne horizontale en retrait des bords de 10 pixels.
Dessiner des points n'est presque pas différent des lignes de dessin. Nous appelons la fonction
SDL_RenderDrawPoint et passons le rendu et les coordonnées du point. Mais juste pour dessiner un point n'est pas intéressant, écrivons
pour le mieux, dans lequel à travers 3 pixels nous allons dessiner des points.
for (int i = 10; i <= 640-10; i +=4 ) { SDL_RenderDrawPoint(ren, i, 90); }
Nous avons obtenu une ligne de points en pointillés horizontale.
Sur ce dessin s'est arrêté. Il ne reste plus qu'à mettre à jour l'écran, régler le temps de pause, sortir et retourner
0 .
SDL_RenderPresent(ren); SDL_Delay(5000); quit(); return 0; }
Ceci conclut notre leçon, voici le code complet:
#include <SDL2/SDL.h> #include <iostream> using namespace std; int SCREEN_WIDTH = 640; int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Renderer *ren = NULL; bool init() { bool ok = true; if (SDL_Init(SDL_INIT_VIDEO) != 0) { cout << "Can't init SDL: " << SDL_GetError() << endl; } win = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { cout << "Can't create window: " << SDL_GetError() << endl; ok = false; } ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED); if (ren == NULL) { cout << "Can't create renderer: " << SDL_GetError() << endl; ok = false; } return ok; } void quit() { SDL_DestroyWindow(win); win = NULL; SDL_DestroyRenderer(ren); ren = NULL; SDL_Quit; } int main (int arhc, char ** argv) { if (!init()) { quit(); system("pause"); return 1; } SDL_SetRenderDrawColor(ren, 0x00, 0x00, 0x00, 0x00); SDL_RenderClear(ren); SDL_SetRenderDrawColor(ren, 0xFF, 0xFF, 0xFF, 0xFF); SDL_Rect rect1 = {10, 10, 50, 50}; SDL_RenderFillRect(ren, &rect1); SDL_Rect rect2 = {70, 10, 50, 50}; SDL_RenderDrawRect(ren, &rect2); SDL_RenderDrawLine(ren, 10, 70, 640 - 10, 70); for (int i = 10; i <= 640-10; i +=4 ) { SDL_RenderDrawPoint(ren, i, 90); } SDL_RenderPresent(ren); SDL_Delay(5000); quit(); return 0; }
Et je vous dis au revoir, au revoir à tous!
<< Leçon précédente || Prochaine leçon
>>