首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让SDL2 0,0在渲染时定位窗口的中心?

要将SDL2的坐标 (0,0) 定位在渲染窗口的中心,您需要知道窗口的宽度和高度,然后根据这些值调整您的坐标

代码语言:javascript
复制
#include <SDL2/SDL.h>

int main(int argc, char* argv[]) {
    SDL_Init(SDL_INIT_VIDEO);

    int windowWidth = 800;
    int windowHeight = 600;

    SDL_Window *window = SDL_CreateWindow("SDL2 Window",
                                         SDL_WINDOWPOS_CENTERED,
                                         SDL_WINDOWPOS_CENTERED,
                                         windowWidth,
                                         windowHeight,
                                         SDL_WINDOW_SHOWN);

    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    // 确保SDL_SetRenderDrawColor设置了颜色
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
    SDL_RenderClear(renderer);

    int centerX = windowWidth / 2;
    int centerY = windowHeight / 2;

    // 假设您要绘制一个圆心位于屏幕中心的圆,半径为50
    int radius = 50;

    // 设置绘制颜色,例如红色
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);

    // 绘制圆的轮廓
    for (int w = 0; w < radius*2; w++) {
        for (int h = 0; h < radius*2; h++) {
            int dx = radius - w; // horizontal offset
            int dy = radius - h; // vertical offset
            if ((dx*dx + dy*dy) <= (radius * radius)) {
                SDL_RenderDrawPoint(renderer, centerX + dx, centerY + dy);
            }
        }
    }

    SDL_RenderPresent(renderer);

    // 在此处添加您的事件循环和其他逻辑

    SDL_Delay(3000); // 仅用于演示目的,在3秒后关闭窗口

    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

在此示例中,我们首先获取窗口的宽度和高度,然后计算中心点的坐标。接下来,我们使用这些坐标作为圆心,绘制一个半径为50的圆。注意,此示例仅用于说明如何将原点移至窗口中心,实际项目中可能需要考虑更多因素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

「SDL第二篇」窗口渲染

前言 上一篇文章中我们对SDL作了简单的介绍,重点介绍了如何编译SDL以及如何使用它。在文章的最后我们留下了一个疑问,即虽然我们创建了窗口,但窗口却并没有真正显示出来。...今天我们就来看一看,如何才能让创建的窗口真正的显示出来。 渲染的基本流程 为什么我们上一课中创建了窗口,但它却并没有显示出来呢?...其原因是,我们创建的窗口只是逻辑上的窗口,要想让窗口显示出来,我们需要对窗口进行效果渲染,也就是要通过绘制像素的方法,将窗口中的像素全部点亮。 那么如何对窗口进行渲染呢?...不过在使用SDL对窗口进行渲染之前,我们要先了解渲染的基本原理。 其基本原理是,首先创建一个window窗口,它是我们要渲染的目标。...void SDL_RenderPresent(SDL_Renderer* renderer) renderer: 上面创建的渲染器上下文 完整例子 我在第一课的代码上,添加了上面几个函数之后,大家可以看到一个全红色的窗口可以显示在我们的面前了

1.6K30
  • 使用SDL2显示一张图片,SDL2上手贴

    老办法,让代码自己来说话: #include //引入SDL头文件 #include //显式bmp之外的图片需要用到sdl_image库,需要单独引入头文件...显而易见,从绘图哲学的角度看,SDL/OpenGL/Direct3D所采用的绘图方式,显然更适合3D类绘图、动画的加速,那么这种技术对平面绘图,比如就是单纯的视频播放,是如何加速的呢?...更具体一点说,比如你看到屏幕上的菜单、窗口、对话框、按钮、文字,几乎都是这些界面管理器来实现的,我们点了一个按钮、拖动一个窗口,都会产生事件,这些事件会由这些界面管理器收集、分类、排序,调用响应用户响应函数做出最后的处理...在mac电脑上安装这两个库的命令是:brew install sdl2 sdl2_image。...谈到附加包的编译参数,我们也经常看到一些教科书上写成类似:`pkg-config --cflags --libs sdl2`这样的形式,这是因为在bash下面,反单引号`就是用来执行命令、并将结果当做字符串返回的功能

    1.7K70

    SDL简介

    SDL在结构上是将不同操作系统的库再封装成相同的函数,例如SDL在Windows平台上是DirectX的封装,而在使用X11的平台上(包括Linux),SDL则是与Xlib库沟通来输出图像。...简单说,SDL 本身是跨平台的,它是对各个平台特有 API 的抽象。 ? 需要注意,SDL的定位是以精简的方式来完成基础的功能,它大幅度简化了控制图像、声音、输出入等工作所需撰写的代码。...Video,用于窗口管理和显示、像素纹理渲染等功能。 Input Events,用于处理各种事件,包括键盘、鼠标、手柄等外设。 Force Feedback,主要用于各种“力反馈”的设备支持。...SDL_mixer 用于支持额外的音频格式,包括 MP3、OGG、WAV 等。 SDL_ttf 用于 TrueType 字体的渲染。 SDL_rtf 用于简单的 RTF 渲染支持。...SDL_net 用于网络相关的支持。 目前,SDL的最新版本是SDL2,它与SDL1在使用有一些不同,它支持了硬件加速等新的能力,因此我们应学习SDL2的使用。

    2.4K30

    如何让同一层次的模块在布局时更紧凑一些

    在时序分析时,我们常会碰到的一类现象是:关键路径上的逻辑单元过于分散,导致布线延迟过大,从而造成时序违例。对此,我们可以通过相对位置约束或绝对位置约束来限定相关逻辑的位置关系。...此外,如果时序违例路径较多,这种方法的有效性将大大降低。 我们还可以采用手工布局的方式,这对于时序违例路径集中在某一个模块或某一个层次内的情形较为适用。使用此方法时需要注意Pblock的大小。...当芯片型号发生改变时很有可能重新确定Pblock的大小或位置。 好在Vivado提供了一个新的约束属性USER_CLUSTER(要求Vivado版本为2022.2或之后)。...该属性的作用是指导工具在布局时将指定层次/模块下的逻辑单元放得更紧凑一些。为便于说明,我们看一个例子。在没有使用该属性时,布局结果如下图所示。可以看到整个设计的资源利用率并不高,但却比较分散。...该属性的属性值为用户定义的组名,属性施加的对象为get_cells的返回值,也就是用户通过get_cells指定的模块,如下图所示。 使用此约束之后,最终的布局结果如下图所示。

    46730

    C 语言代码示例,展示了如何实现一个简单的图形化用户界面(GUI)游戏

    C 语言代码示例,展示如何实现一个简单的图形化用户界面(GUI)游戏,使用了图形库 SDL(Simple DirectMedia Layer)和 SDL_image: #include #include #include SDL2/SDL.h> #include SDL2/SDL_image.h> // 屏幕宽度和高度 const int SCREEN_WIDTH...= 800; const int SCREEN_HEIGHT = 600; // 初始化 SDL,创建窗口和渲染器 void initSDL(SDL_Window** window, SDL_Renderer...定义了以下函数: initSDL:用于初始化 SDL,创建窗口和渲染器。 closeSDL:用于释放资源,关闭 SDL。 main 函数中,我们先调用 initSDL 进行初始化。...然后,我们加载游戏背景图片,并创建相应的纹理和表面。接下来,我们进入游戏循环,不断渲染背景,并监听 SDL_QUIT 事件以判断是否退出游戏。

    51320

    【DB笔试面试453】在Oracle中,如何让日期显示为“年-月-日 时:分:秒”的格式?

    题目部分 在Oracle中,如何让日期显示为“年-月-日 时:分:秒”的格式?...NLS_DATE_FORMAT来让日期显示更人性化,可以有如下几种方式: ① 在会话级别运行命令:“ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:...MI:SS';”,只在会话级别起作用。...④ 设置环境变量NLS_DATE_FORMAT,但是必须和NLS_LANG一起设置,否则不会生效,可以直接在会话窗口使用export或.bash_profile配置文件(全局应用)设置,如下所示: export...About Me:小麦苗 ● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用 ● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/ ● 本系列题目来源于作者的学习笔记

    3.4K30

    原创 | 整理了38个Python游戏开发库

    说到游戏,山月想起了小时候和同桌在纸上玩的井字游戏、五子棋,以及现在玩的王者和吃鸡。 可以说,游戏充实了我的空闲时间,给我增加了许多乐趣,也让我认识了更多的新朋友。...它支持窗口、用户界面事件处理、操纵杆、OpenGL图形、加载图像和视频以及播放声音和音乐。pyglet支持在Windows、OS X和Linux上工作。...它不依赖C代码,而是使用内置的CTypes模块与SDL2接口,并为常见的SDL2功能提供简单的Python类和包装。...易于学习的脚本语言让任何人都可以高效地编写大型视觉小说,而其 Python 脚本足以应对复杂的模拟游戏。...Myrmidon的底线是开发人员应该只关注游戏对象的行为以及用户如何与它们交互。任何低级图形、窗口或输入处理应由Myrmidon全权负责。尽可能地隐藏这些信息,并允许您继续编写游戏。

    3.4K40

    C++游戏开发:实现2D3D游戏逻辑和渲染

    游戏渲染游戏渲染是将游戏对象和场景图形化显示在屏幕上的过程。下面是C++实现游戏渲染的主要步骤:创建渲染上下文:使用渲染库(如OpenGL或DirectX)创建一个渲染上下文,用于管理渲染操作。...// ...在渲染循环中绘制对象:在每一帧中,使用渲染库的绘制功能将游戏对象绘制到屏幕上。...希望这篇文章对你有所帮助,并激发你在游戏开发领域的创造力和热情!我们以一个简单的2D游戏为例,实现一个小球在窗口中的移动和碰撞检测。...在主循环中,我们不断更新小球的位置,并通过碰撞检测函数checkCollision来判断小球是否与窗口边界发生碰撞。若发生碰撞,就改变小球的移动方向。最后,我们在渲染器上绘制小球并更新显示。...在游戏循环中,我们通过处理SDL事件来响应玩家输入,并更新飞船的位置。然后,我们在渲染器上绘制飞船的矩形,并通过调用SDL_RenderPresent函数来更新显示。

    1.3K10

    FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg

    开发桌面程序也是很常见的,下面就介绍如何在Visual Studio的C++工程中集成FFmpeg库和SDL2库。...等待Visual Studio打开新项目,在主界面右侧的解决方案资源管理器窗口中右击项目名称,选择右键菜单底部的属性选项。...\sdl2\include单击外部包含目录窗口右下角的确定按钮,确认添加上面两个头文件目录。...在弹出的附加库目录窗口中添加下列库文件目录(具体路径根据自己电脑上的sdl2安装路径调整):E:\msys64\usr\local\ffmpeg\libE:\msys64\usr\local\sdl2\...单击附加依赖项窗口右下角的确定按钮,确认添加上述的lib文件列表。然后单击属性页面右下角的确定按钮,完成FFmpeg与SDL2的依赖库导入设置。

    41110

    zoom 和 transform: scale(x)

    都是变形矩阵)得到最终的坐标(不过你会发现,一个元素如果是绝对定位,然后通过 transform 改变了它的显示位置,审查元素时,这个元素的 tbrl 值并不会被更新),且 transform 属性不可继承的...,是以它的左上角为中心,进行 zoom 的(当元素脱离文档流时,要使 transform: scale(x) 和 zoom 达到相同的效果,还要具体分析 transform-origin 要如何设置)。...02.jpg 下面这段是外层容器的样式,背景是定义在 switch-wh 动画中,通过绝对定位让浏览器自行计算,保证容器大小占满整个屏幕: .sf-index{ overflow: hidden;...当元素都进行渲染了,坐标已经确定了,再进行缩放,也就是在原来元素基础上改变大小。...所以 .sf-index 虽然在渲染时四个角的位置分别是(0,0)、(100%,0)、(0,100%)、(100%, 100%),经过以 (0,0) 为变换中心的 scale,就变成了(0,0)、(85%

    2.2K30

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

    前言 之前的SDL的两篇文章我向大家介绍了如何编译使用 SDL,以及如何才能让窗口显示出来。想了解相关内容的同学可以点击下面的链接查看相关内容。...「SDL第一篇」入门 「SDL第二篇」窗口渲染 本文将向大家介绍一下,如何通过 SDL 绘制一些基本图形,如 点、线、矩形。了解了这些基本图形后,你就可以按照搭积木的方式,构造出其它更复杂的图形了。...有哪些基本图形可以绘制 SDL中绘制基本图形的 API并不多,主要是 点、线、矩形。其它图形都可以通过 点、线、矩形组合出来。 设置颜色:在绘制图形前,要设置一下画笔的色彩。...这里需要注意的是,如果画笔与背景色相同了,那在窗口中是显示不出来图形的。 画点。 画线。 画矩形。 填充矩形。 下面来详细介绍一下这几个API。...Create an application window with the following settings: window = SDL_CreateWindow( "An SDL2

    1.9K20

    28.QT-QPainter介绍

    介绍 可以在QPaintDevice类上绘制各种图形 QPaintDevice类表示QPainter的绘图设备(画布) QpaintDevice子类有QImage、QOpenGLPaintDevice、...,启动反锯齿 painter.drawChord(rect,30*16,150*16); //绘画角度为30°~(30+150°) QPainter-视口/窗口 在Qt中, QPainter...需要注意的是: Qpainter的坐标是使用的窗口坐标(逻辑坐标) 当QPainter初始化时,视口和窗口坐标默认是相同的,也就是说原点(0,0)在于窗口左上角 所以视口和窗口的最小坐标和最大坐标是从左上到右下的...示例1-设置原点(0,0)为窗口的(100,100),设置绘画区域为窗口大小为100*100 如下图所示,其中蓝色为视口坐标,红色为窗口坐标: ?...示例2-在窗口的中心处绘制正弦波 QPainter painter(this); painter.setViewport(50,50,width()-100,height()-100); //设置视口为中心处

    1.8K20

    (译)SDL编程入门(1)Hello SDL

    建议使用MinGW搭建Windows上的C语言开发环境,详情可阅读译者博客《程序员C语言快速上手——环境准备篇(一)》 设置好SDL后,我们将介绍如何创建SDL2窗口。...本教程涵盖了第一个重要的步骤:让一个窗口弹出。 现在你已经设置好了SDL,是时候制作一个赤裸裸的SDL图形应用程序,在屏幕上渲染一个四边形。...你可能更习惯于使用iostream,但我在我的应用程序中使用printf,因为它更安全。对于这些早期的应用,使用你最习惯的东西。 在加入头文件后,我们声明我们要渲染的窗口的宽度和高度。...为了保持本教程的简单性,我们在这里要做的就是使用SDL_FillRect将窗口的表面填充为白色。在这里不要太担心这个函数。本教程只关心如何让一个窗口弹出。...关于渲染的一个重要的事情是,仅仅因为你在屏幕表面画了一些东西,并不意味着你会看到它。当你完成了所有的绘制后,你需要更新窗口,使其显示出你绘制的所有内容。

    3K40

    2023-02-17:sdl是跨平台的多媒体开发库,请问用go语言如何调用?

    2023-02-17:sdl是跨平台的多媒体开发库,请问用go语言如何调用?答案2023-02-17:用 github.com/moonfdd/sdl2-go 这个库。...这是我自己写的golang绑定sdl库,只依赖动态链接库,不依赖头文件,接口全部是按照头文件改过来的。最好用sdl2里的接口,sdl3里的接口,运行有问题。...示例代码如下:package mainimport ("fmt""io/ioutil""time""unsafe"sdl "github.com/moonfdd/sdl2-go/sdl2""github.com...YUV的分辨率video_width := int32(YUV_WIDTH)video_height := int32(YUV_HEIGHT)// 2.显示窗口的分辨率win_width := int32...video_height * h_ratiorect.W = win_widthrect.H = win_height// 清除当前显示renderer.SDL_RenderClear()// 将纹理的数据拷贝给渲染器

    61800

    (译)SDL编程入门(7)纹理加载和渲染

    纹理加载和渲染 SDL2 的一个主要新功能是纹理渲染 API。这为您提供了快速、灵活的基于硬件的渲染。在本教程中,我们将使用这种新的渲染技术。...//窗口渲染器 SDL_Renderer* gRenderer = NULL; //当前显示的纹理 SDL_Texture* gTexture = NULL; SDL中的纹理有自己的数据类型,直观地称为...当我们处理SDL纹理时,你需要一个SDL_Renderer来将它渲染到屏幕上,这就是为什么我们要声明一个名为 "gRenderer "的全局渲染器。...,我们必须为我们的窗口创建一个渲染器,这样我们就可以在上面渲染纹理,幸运的是这很容易通过调用SDL_CreateRenderer[1]来完成。...在 这里[8]下载本教程的媒体和源代码。

    1.1K20

    (译)SDL编程入门(15)旋转和翻转

    旋转和翻转 SDL2的硬件加速纹理渲染还能给我们提供图像快速翻转和旋转的能力。在本教程中,我们将利用这一点使一个箭头纹理旋转和翻转。 ?...渲染函数现在需要一个旋转角度、一个用于旋转纹理的点和SDL翻转枚举[1]。 就像剪裁矩形一样,我们给出了参数的默认值,以防你想在没有旋转或翻转的情况下渲染纹理。...) ) / 2, NULL, degrees, NULL, flipType ); //Update screen SDL_RenderPresent( gRenderer ); 这里我们进行实际的渲染...下一个参数是剪裁矩形,由于我们要渲染整个纹理,所以设置为空。下一个参数是旋转角度,单位是度。下一个参数是我们要旋转的点。当这个参数为空时,它将围绕图像的中心旋转。最后一个参数是图像的翻转方式。...要想了解如何使用旋转,最好的方法就是玩转它。实验一下,看看通过组合不同的旋转/翻转,你会得到什么样的效果。

    1.3K20

    目标定位特征点检测目标检测滑动窗口的卷积神经网络实现YOLO算法

    --Classification with localization 定位分类 当图片中有 多个 对象时,检测出它们并确定出其位置,其相对于图像分类和定位分类来说强调一张图片中有 多个 对象--Detection...对象定位 localization 对于普通的图像分类问题:在最后的输出层连接上 softmax 函数,其中 softmax 神经元的数量取决于分类类别数。...对于 定位分类 可以让神经网络多输出几个单元,输出一个边界框(bounding box), 本节课程中将图片左上角标记为(0,0),右下角标记为(1,1),边界框中心标记为 ,边界框宽度表示为...---- 3.3 目标检测 Object detection 基于滑动窗口的目标检测算法(sliding windows detection algorithm) 对于训练集样本,X 使用经过裁剪的,检测目标基本在图像中心的图片...其中一个可以得到较精确的边界框的算法时 YOLO 算法--即 You only look once 具体操作方式是:假设图像的大小是 ,然后在图像上放一个网格,为了描述的简洁,在此使用 的网格

    1.9K10
    领券