gpt4 book ai didi

graphics - 简单的2D图形编程

转载 作者:行者123 更新时间:2023-12-02 21:43:54 25 4
gpt4 key购买 nike

多年前我使用 C 和 C++ 中的 DirectDraw 来绘制一些简单的 2D 图形。我习惯了创建表面、使用指针写入表面、翻转后台缓冲区、在屏幕外表面上存储 Sprite 等步骤。那么今天如果我想用C或C++编写一些2D图形程序,该怎么做呢?

  1. 同样的编程方法是否仍然适用,或者我是否必须对视频硬件抽象有不同的理解?
  2. Windows 和 Linux 上有哪些库和工具可用?

最佳答案

What libraries and tools are available on Windows and Linux?

SDL , OpenGL ,和Qt 4 (它是 gui 库,但对于 2D 渲染来说它足够快/灵活)

Will this same method of programming still apply or do I have to have a different understanding of the video hardware abstraction?

通常,您不会每帧“使用指针”将数据写入表面,而是使用 API 提供的方法来操作/绘制它们。这是因为与每帧将数据从系统内存传输到视频内存相比,驱动程序使用视频内存的工作速度更快。如果必须的话,您仍然可以将数据写入硬件表面/纹理(即使在每一帧期间),但这些表面可能需要以特殊方式处理才能获得最佳性能。例如,在 DirectX 中,您需要告诉驱动程序表面数据将频繁更改,并且您只会将数据写入表面,而不会读回。另外,在面向 3D 的 API (openGL/DirectX) 中,在另一个表面上渲染表面是有点“特殊情况”,您可能需要使用“渲染目标”(DirectX) 或“帧缓冲区对象”(OpenGL)。这与 DirectDraw 不同(据我所知,您可以将任何内容 block 传输到任何内容上)。好处是,通过 3D api,您可以以极其灵活的方式处理表面/纹理 - 拉伸(stretch)、旋转、用颜色着色、将它们混合在一起、使用着色器处理它们都可以在硬件上完成。

另一件事是,具有硬件支持的现代 3D api 通常不会在 8 位调色板纹理上运行,而更喜欢 ARGB 图像。需要时,可以模拟带有调色板的 8 位表面,并且 2D 低级 API(SDL、DirectDraw)提供它们。您还可以使用片段/像素着色器在硬件上模拟 8 位纹理。

无论如何,如果您想要使用表面的“老式”跨平台方式(即“使用指针每帧写入数据” - 即您需要软件渲染器或其他东西),SDL 可以轻松实现这一点。如果您想要更高级别、更灵活的操作 - Qt 4 和 OpenGL 适合您。

关于graphics - 简单的2D图形编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com