c++ - 用 C++ 绘制图形(这是如何工作的?)(以及更快编译器的技巧?)

标签 c++ graphics compilation window

<分区>

我已经在 Gamemaker 和 Flash 中制作随机的东西大约 4-5 年了,但我一直想用 C++ 编写代码。 (我不想使用游戏引擎,我更感兴趣的是自己编写。)

我的目标是最终编写一个早期 3D 风格的引擎(我想模仿低多边形角色、低分辨率纹理、“游泳”纹理和多边形等的 PSX 外观)作为对游戏的回归我小时候玩过。

但我想从小做起。

在从图书馆借了一些关于基础知识和简单代码的书(这是一次有趣的经历)之后,我想更进一步,了解图形如何与 C++ 一起工作。不是 3D 图形,只是一般图形。 (也许是一个小 Sprite )我想做一些简单的事情并深入了解它是如何工作的。

我想在新窗口(320x240,无抗锯齿)中绘制图形并摆脱控制台窗口。我是初学者,我不太明白它是如何工作的,但据我了解,C++ 只是一种编程语言,我必须包含其他东西(我不知道)来绘制图形。

我正在使用 Notepad++ 和 MinGW 来编译我的代码。 (尽管编译速度非常慢。我很想知道一个更好更快但免费的编译器,就像 MinGW 一样,可以跨多个平台工作)

我希望有人能帮助我。

谢谢,

~一个非常热情的新手(和建模师/艺术家/音乐家),有很多想法。

最佳答案

MinGW 是 GCC 的一个端口,适用于所有类 UNIX 系统。 如果您想要一个真正的跨平台编译器,您可以使用 LLVM/Clang(免费和开源(BSD 许可))或 Intel 编译器(商业的,但速度更快)。

要绘制事物,您可以:使用 native API(痛苦),使用图形工具包(DirectX、OpenGL...)(也痛苦),使用库(对于 2D 和事物处理,SDL 很流行,但我更喜欢 SFML)(对于 3D,您可以考虑 GLFW)。

查看所有这些,决定您更喜欢哪些(它们都是跨平台的)并阅读它们的文档/API/教程。


SFML API 示例(直接回答有关如何绘制 Sprite 的问题)

#include <SFML/Graphics.hpp>
int main()
{
    sf::RenderWindow window(sf::VideoMode(600,800), "Example!");//window information, can be more precise

    sf::Texture texture;//a texture for the sprite
    if(!texture.loadFromFile("MySprite.png")//load the texture
    {
        return 1;
    }
    sf::Sprite sprite(texture);//make the sprite from the texture

    while(window.isOpen())//until window dies
    {
        sf::Event event; //event handling
        while(window.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
                window.close();// let window close if it's closed
        }
        window.clear(); //clear screen
        window.draw(sprite);//draw the sprite wherever it is
        window.display();//switch buffers
    }
}

另外,一个小的旁注。开发(完全跨平台)往往在 UNIX 上工作得更好(因为你不必经历在 Windows 上设置的巨大痛苦,还记得任何图书馆开始工作有多痛苦吗?)我建议你也看看 CMake (或其任何替代品),vim(或 geany,如果 vim 太硬核)并通过命令行编译 :)

关于c++ - 用 C++ 绘制图形(这是如何工作的?)(以及更快编译器的技巧?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582076/

相关文章:

c++ - OpenSSL解密文本长度

c++ - 多维数组是否与矩阵相同?

java - Android 圆形与矩形碰撞

android - 尝试在Unity3d中编译 Assets 之一时编译项目卡纸

linq - 使用 Expression.Lambda() 编译委托(delegate) - 参数超出范围,但真的是这样吗?

c++ - 使用递归的骑士巡回算法

c++ - 在没有虚方法或父类(super class)的类中,假设(第一个成员变量的地址)== this 是否安全?

c++ - QToolbar的扩展按钮如何被调用?

java - 如何将图片分配给java swing中的矩形类?

linux - fatal error asm/bitsperlong.h 没有这样的文件或目录