SDL绘制简单几何图形

用到的API

  • SDL_SetRenderDrawColor(SDL_Renderer* renderer, Uint8 r,

    Uint8 g, Uint8 b, Uint8 a)

  • SDL_RenderClear(SDL_Renderer* renderer)
  • SDL_RenderFillRect(SDL_Renderer* renderer, const SDL_Rect *rect)
  • SDL_RenderDrawRect(SDL_Renderer* renderer, const SDL_Rect *rect)
  • SDL_RenderDrawLine(SDL_Renderer* renderer,int x1,int y1,int x2,int y2)
  • SDL_RenderDrawPoint(SDL_Renderer* renderer,int x,int y)
  • SDL_RenderPresent(SDL_Renderer* renderer);

API介绍

  • SDL_SetRenderDrawColor 接收的四个参数分别是RGB通道和alpha通道
  • SDL_RenderClear 用设置的绘画颜色清理目标渲染器
  • SDL_RenderFillRect 用设置的绘画颜色填充矩形
  • SDL_RenderDrawRect 用设置的绘画颜色绘制矩形边框
  • SDL_RenderDrawLine 用设置的绘画颜色绘制线段
  • SDL_RenderDrawPoint 用设置的绘画颜色绘制点
  • SDL_RenderPresent 用渲染器中的内容更新屏幕

SDL_Rect 介绍

SDL_Rect 是一个结构体,其中有四个int型的成员,x,y,w,h

x,y 为坐标, w,h 为宽和高

SDL中的x,y坐标系如图片所示

代码

#include <SDL.h>

#define SCREEN_W 800
#define SCREEN_H 600

int main(int argc, char **argv) {
    SDL_Window *pWindow = NULL;
    SDL_Renderer *pRenderer = NULL;
    SDL_Init(SDL_INIT_EVERYTHING);
    pWindow = SDL_CreateWindow("Geometry Rendering",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,SCREEN_W,SCREEN_H,SDL_WINDOW_OPENGL);
    pRenderer = SDL_CreateRenderer(pWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);

    bool quit = false;
    SDL_Event e;
    while( !quit ) {
        while( SDL_PollEvent(&e) != 0 ) {
            if(e.type == SDL_QUIT)
                quit = true;
        }
        SDL_SetRenderDrawColor(pRenderer,0xFF,0xFF,0xFF,0xFF);
        SDL_RenderClear(pRenderer);

        SDL_Rect fillRect = {SCREEN_W / 4, SCREEN_H / 4, SCREEN_W / 2, SCREEN_H / 2};
        SDL_SetRenderDrawColor(pRenderer, 0xFF, 0x00, 0x00, 0xFF);
        SDL_RenderFillRect(pRenderer, &fillRect);       //填充矩形

        SDL_Rect outlineRect = {SCREEN_W / 6, SCREEN_H / 6, SCREEN_W * 2 / 3, SCREEN_H * 2 / 3};
        SDL_SetRenderDrawColor(pRenderer,0x00,0xFF,0x00,0xFF);
        SDL_RenderDrawRect(pRenderer,&outlineRect);     //绘制矩形边框

        SDL_SetRenderDrawColor(pRenderer,0x00,0x00,0xFF,0xFF);
        SDL_RenderDrawLine(pRenderer,SCREEN_W * 4 / 5,SCREEN_H * 4 / 5,SCREEN_W * 1 / 5,SCREEN_H * 1 / 5);  //绘制线段

        SDL_SetRenderDrawColor(pRenderer,0xFF,0xFF,0x00,0xFF);
        for(int i = 0; i <= SCREEN_H; i += 10) {
            SDL_RenderDrawPoint(pRenderer, SCREEN_W / 2, i);    //绘制点
        }

        SDL_RenderPresent(pRenderer);
    }

    SDL_DestroyWindow(pWindow);
    SDL_DestroyRenderer(pRenderer);
    SDL_Quit();
    return 0;
}

效果

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-02 15:14:23

SDL绘制简单几何图形的相关文章

OpenGL学习-------绘制简单的几何图形

本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的点,只有位置,没有大小.但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点.另一方面,无论图形输出设备(例如,显示器)如何精确,始终不能输出一个无穷小的点.一般情况下,OpenGL中的点将被画成单个的像素(像素的概念,请自己搜索之~),虽然它可能足够小,但并不会是无穷小.同一像素上,Op

使用UGUI绘制自定义几何图形

本文展示了如何使用UGUI绘制矩形,同理可绘制其他几何图形. UGUI的渲染体系,简单来说所有的控件和可显示的元素都是Graphic.Graphic持有一个CanvasRenderer,通过SetVertices设置顶点,最终完成绘制. 举例来说,Image控件就是一个Graphic,这个GameObject上面同时还有一个CanvasRenderer,两者结合起来最终把图片绘制完成. 重点在于绘制函数修改为OnPopulateMesh,使用VertexHelper来设置顶点,先设置所有的顶点,

Direct2D教程(三)简单几何图形

从本章开始,我们介绍D2D几何图形. D2D图形分类 Direct2D支持多种类型的几何图形,包括Simple Geometry(简单几何图形) 矩形 圆角矩形 椭圆 Path Geometry(路径图形)Composite Geometry(复合图形) Geometry Group(图形组) Transformed Geometry(变换的图形) 各种图形对应的D2D接口如下,所有接口都继承自ID2D1Geometry. 矩形-ID2D1RectangleGeometry 圆角矩形-ID2D1

Java入门:绘制简单图形

在上一节,我们学习了如何使用swing和awt工具创建一个空的窗口,本节学习如何绘制简单图形. 基本绘图介绍 Java中绘制基本图形,可以使用Java类库中的Graphics类,此类位于java.awt包中.在我们自己的java程序文件中,要使用Graphics类就需要使用import java.awt.Graphics语句将Graphics类导入进来. Graphics类提供基本的几何图形绘制方法,主要有:画线段.画矩形.画圆.画带颜色的图形.画椭圆.画圆弧.画多边形等.本项目仅用到画直线的功

opengl使用现在比较常用的方法来绘制简单几何图元

上一篇文章中也使用了比较老的方法glBegin 和 glEnd的方法来绘制了简单的集合图元,现在使用比较新的而且更高效的方法来绘制简单的集合图元. 这种方法与以前方法的不同点在对数据的处理上,glBegin 和 glEnd是要给出数据,然后直接来进行绘制,然而新的方法是现将数据保存到显存中,然后直接一个绘制命令,就可以直接从显卡内存中直接读取数据进行绘制,效率更高而且更方便. #include <GL/glew.h> #include <GL/freeglut.h> #includ

shape-自绘制简单图形

shape 可以绘制简单的图形,颜色等.它主要就是应用于selector 的一些状态. 本文内容参考自http://www.cnblogs.com/cyanfei/archive/2012/07/27/2612023.html 自己验证了下,学习记录 它主要有以下几个部分,分别是 填充(solid):设置填充的颜色 间隔(padding):设置四个方向上的间隔 大小(size):设置大小 圆角(corners):设置图形圆角,默认是正方形的 渐变(gradient):当设置填充颜色后,无渐变效果

学习笔记:HTML5 Canvas绘制简单图形

HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" width="1024" style="border:1px solid #aaa;text-align:center;"> 你的浏览器不支持Canvas,请更新浏览器再试!!! </canvas> 在canvas标签之间应该做浏览器是否支持的检测,

css实现简单几何图形

css实现简单几何图形 前言:你知道吗?用代码就可以做出三角形.圆形.扇形等等这些几何图形呦.快过来一探究竟吧! 页面上一些简单的图形,如三角形.圆形等等,除了用图片来实现,我们还可以用css的border属性来实现,不仅减少了内存占用,对图形的操作也更灵活. 接下来我们就一步一步的来说一下怎么实现这些几何图形. 本文列举了一些常见的几何图形,更多几何图形请到github下载. 项目github地址:https://github.com/ichengll/C-heart 话不多说,这就开始吧.

2.绘制简单的几何图形

一.点.直线和多边形 数学上的点,只有位置,没有大小.但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点.另一方面,无论图形输出设备如何精确, 始终不能输出一个无穷小的点.一般情况下,OpenGL中的点将被画成单个的像素,虽然它可能足够小,但并不会是无穷小. 同一像素上,OpenGL可以绘制许多坐标只有稍微不同的点,但该像素的具体颜色将取决于OpenGL的实现. 同样的,数学上的直线没有宽度,但OpenGL的直线则是有宽度的.同时,OpenGL的直线必须是有限长度,而不是像数学概念那