「SDL第三篇」绘制基本图形

您所在的位置:网站首页 sdl绘制 「SDL第三篇」绘制基本图形

「SDL第三篇」绘制基本图形

2024-03-31 23:29| 来源: 网络整理| 查看: 265

前言

之前的SDL的两篇文章我向大家介绍了如何编译使用 SDL,以及如何才能让窗口显示出来。想了解相关内容的同学可以点击下面的链接查看相关内容。

「SDL第一篇」入门 「SDL第二篇」窗口渲染

本文将向大家介绍一下,如何通过 SDL 绘制一些基本图形,如 点、线、矩形。了解了这些基本图形后,你就可以按照搭积木的方式,构造出其它更复杂的图形了。

有哪些基本图形可以绘制

SDL中绘制基本图形的 API并不多,主要是 点、线、矩形。其它图形都可以通过 点、线、矩形组合出来。

设置颜色:在绘制图形前,要设置一下画笔的色彩。这里需要注意的是,如果画笔与背景色相同了,那在窗口中是显示不出来图形的。 画点。 画线。 画矩形。 填充矩形。

下面来详细介绍一下这几个API。

API详细介绍

设置颜色

int SDL_SetRenderDrawColor(SDL_Renderer* renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a)

该函数中的参数 a 指明了颜色的透明度。

但该值我设置了一下没有起作用,应该需要和BlendMode一起才能起作用。这块有谁清楚可以指定一下

画点

int SDL_RenderDrawPoint(SDL_Renderer* renderer, int x, int y)

画多个点

int SDL_RenderDrawPoints(SDL_Renderer* renderer, const SDL_Point* points, int count) points: 点数组。 count: 点的个数。

画线

int SDL_RenderDrawLine(SDL_Renderer* renderer, int x1, int y1, int x2, int y2)

画多条线

int SDL_RenderDrawLines(SDL_Renderer* renderer, const SDL_Point* points, int count)

该函数会将使用两个相邻的点之间进行连线。最终画出你想画的图形。如画三角形,多边形或圆形。

绘制矩形

int SDL_RenderDrawRect(SDL_Renderer* renderer, const SDL_Rect* rect)

rect: 是要绘制的一块区域。它包括,x,y,w,h这个元素。

填充矩形

int SDL_RenderFillRect(SDL_Renderer* renderer, const SDL_Rect* rect)

使用指定的色彩填充一块矩形。

填充多块矩形

int SDL_RenderDrawRects(SDL_Renderer* renderer, const SDL_Rect* rects, int count) rects: 指定的矩形数组。 count: 指定矩形个数。 我们来看看代码

下面的代码非常之简单,我们在上一篇文章代码的基础上增加了几个画线、画矩形的API就可以了。

这里唯一值得注意的地方是下面这个函数。

SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);

该函数是设置画笔颜色,也就是说我们想画出什么颜色的图形,只要用这个函数设置一下,再使用画点、画线的API就可以画出对应颜色的图形了。

原码如下:

#include "SDL.h" #include #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你可以构造出更加复杂的图形。

希望本文能对你所有帮助,谢谢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3