之前的SDL的两篇文章我向大家介绍了如何编译使用 SDL,以及如何才能让窗口显示出来。想了解相关内容的同学可以点击下面的链接查看相关内容。
本文将向大家介绍一下,如何通过 SDL 绘制一些基本图形,如 点、线、矩形。了解了这些基本图形后,你就可以按照搭积木的方式,构造出其它更复杂的图形了。
SDL中绘制基本图形的 API并不多,主要是 点、线、矩形。其它图形都可以通过 点、线、矩形组合出来。
下面来详细介绍一下这几个API。
- points: 点数组。
- count: 点的个数。画线
int SDL_RenderDrawLine(SDL_Renderer* renderer, int x1, int y1, int x2, int y2)
- rects: 指定的矩形数组。
- count: 指定矩形个数。
下面的代码非常之简单,我们在上一篇文章代码的基础上增加了几个画线、画矩形的API就可以了。
这里唯一值得注意的地方是下面这个函数。
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
该函数是设置画笔颜色,也就是说我们想画出什么颜色的图形,只要用这个函数设置一下,再使用画点、画线的API就可以画出对应颜色的图形了。
原码如下:
#include "SDL.h"
#include <stdio.h>
#define POINTS_COUNT 4
static SDL_Point points[POINTS_COUNT] = {
{320, 200},
{300, 240},
{340, 240},
{320, 200}
};
static SDL_Rect bigrect = {0,0,540, 380};
int main(int argc, char* argv[]) {
int flag = 1;
SDL_Window *window; // Declare a pointer
SDL_Renderer *renderer;
SDL_Init(SDL_INIT_VIDEO); // Initialize SDL2
// Create an application window with the following settings:
window = SDL_CreateWindow(
"An SDL2 window", // window title
SDL_WINDOWPOS_UNDEFINED, // initial x position
SDL_WINDOWPOS_UNDEFINED, // initial y position
640, // width, in pixels
480, // height, in pixels
SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS// flags - see below
);
// Check that the window was successfully created
if (window == NULL) {
// In the case that the window could not be made...
printf("Could not create window: %s\n", SDL_GetError());
return 1;
}
/* We must call SDL_CreateRenderer in order for draw calls to affect this window. */
renderer = SDL_CreateRenderer(window, -1, 0);
/* Select the color for drawing. It is set to red here. */
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
/* Clear the entire screen to our selected color. */
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
//SDL_RenderDrawLine(renderer, 100, 20, 500, 400);
SDL_RenderDrawLines(renderer, points, POINTS_COUNT);
SDL_Rect rect = {200, 300, 100, 100};
SDL_RenderDrawRect(renderer, &rect);
SDL_SetRenderDrawColor(renderer, 0, 255, 255, 255);
SDL_RenderFillRect(renderer, &rect);
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_RenderFillRect(renderer, &bigrect);
/* Up until now everything was drawn behind the scenes.
This will show the new, red contents of the window. */
SDL_RenderPresent(renderer);
// The window is open: could enter program loop here (see SDL_PollEvent())
SDL_Delay(3000); // Pause execution for 3000 milliseconds, for example
//destory renderer
if (renderer) {
SDL_DestroyRenderer(renderer);
}
// Close and destroy the window
SDL_DestroyWindow(window);
// Clean up
SDL_Quit();
return 0;
}
本文重点介绍了 SDL 绘制经常使用的几个基本图形API,通过这些API你可以构造出更加复杂的图形。
希望本文能对你所有帮助,谢谢!