当前位置:首页 > 其他 > 正文内容

SDL3 入门(3):三角形

邻居的猫1个月前 (12-09)其他1247

SDL3 供给了 SDL_RenderGeometry 函数制作几何图形,用法和 OpenGL 差不多,先界说极点数据,然后依据极点数据制作几何图形。

制作三角形的代码如下:

std::array<SDL_Vertex, 3> origin_vertices = {
    SDL_Vertex { { 150, 100 }, { 1.0f, 0.0f, 0.0f, 1.0f } }, // top
    SDL_Vertex { { 000, 300 }, { 0.0f, 1.0f, 0.0f, 1.0f } }, // left bottom
    SDL_Vertex { { 300, 300 }, { 0.0f, 0.0f, 1.0f, 1.0f } } // right bottom
};

SDL_RenderGeometry(renderer, nullptr, origin_vertices.data(), origin_vertices.size(), nullptr, 0);

作用如图:

留意上面的极点界说,坐标虽然是浮点数但表明的是像素值,色彩则做了归一化(取值规模 0.0~1.0)这一点和 SDL2 不同,SDL2 中色彩取值规模是 0~255.

能够经过实时修正极点坐标完成运动作用。首要修正事情循环,由重绘事情 SDL_EVENT_WINDOW_EXPOSED 触发烘托改成空闲时主动烘托,对应的读取事情的方法也由 SDL_WaitEvent 改为 SDL_PollEvent

SDL_Event event {};
bool keep_going = true;

while (keep_going) {
    while (SDL_PollEvent(&event)) {
        switch (event.type) {
        case SDL_EVENT_QUIT:
            keep_going = false;
            break;

        case SDL_EVENT_KEY_DOWN: {
            keep_going = keep_going && (event.key.keysym.sym != SDLK_ESCAPE);
            break;
        }
        }
    }

    SDL_SetRenderDrawColor(renderer, 16, 0, 16, 255);
    SDL_RenderClear(renderer);
    SDL_RenderGeometry(renderer, nullptr, origin_vertices.data(), origin_vertices.size(), nullptr, 0);
    SDL_RenderPresent(renderer);
}

运用 SDL_GetTicks 获取时刻,界说核算三角形方位所需变量:

uint64_t last_tickets = SDL_GetTicks();
float position = 0.0f;
float direction = 1.0f;

while 循环中添加方位核算和修正极点数据的代码:

while(keep_going) {
    ...

    uint64_t current_ticks = SDL_GetTicks();
    float delta_time = (current_ticks - last_tickets) / 1000.0f;
    last_tickets = current_ticks;
    position += 200.0f * delta_time * direction;

    int width = 0;
    SDL_GetRenderOutputSize(renderer, &width, nullptr);
    float max_position = static_cast<float>(width) - (origin_vertices[2].position.x - origin_vertices[1].position.x);

    if (position > max_position) {
        direction = -1.0f;
    } else if (position < 0.0f) {
        position = 0.0f;
        direction = 1.0f;
    }

    std::vector<SDL_Vertex> vertices;
    for (const auto& vertex : origin_vertices) {
        vertices.push_back(vertex);
        vertices.back().position.x += position;
    }

    ...
    SDL_RenderGeometry(renderer, nullptr, vertices.data(), vertices.size(), nullptr, 0);
    ...
}

这样咱们就得到了一个在窗口上水平往复运动的三角形:

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=787

分享给朋友:

“SDL3 入门(3):三角形” 的相关文章

【标题全解】ACGO巅峰赛#15

【标题全解】ACGO巅峰赛#15

ACGO 巅峰赛#15 - 标题解析 距离四个月再战 ACGO Rated,鉴于最近学业繁忙,竞赛打得都不是很频频。尽管这次没有 AK 排位赛(我能够说是因为周末太忙,没有足够的时刻考虑标题…(好吧,其实或许是因为我把 T5 给想杂乱了))。 本文仍旧供给每道题的完好解析(因为我在赛后把标题做出来...

归约证明在密码学中的使用

归约证明在密码学中的使用

PrimiHub一款由暗码学专家团队打造的开源隐私核算渠道,专心于共享数据安全、暗码学、联邦学习、同态加密等隐私核算范畴的技能和内容。 在现代信息社会,暗码学在维护信息安全中扮演着至关重要的人物。而归约证明(Reduction Proof)作为暗码学中的一个重要东西,经过将一个问题的安全性归约为另...

MerkleTree in BTC

MerkleTree in BTC

Merkle 树是一种用于高效且安全地验证大数据结构完整性和一致性的哈希树。它在比特币网络中起到至关重要的效果。Merkle 树是一种二叉树结构,其间每个叶子节点包括数据块的哈希值,每个非叶子节点包括其子节点哈希值的组合哈希。 比特币网络中的 Merkle 树 在比特币区块链中,每个区块包括多个买卖...

开源是什么,什么是开源?

开源是什么,什么是开源?

开源通常指的是软件源代码的开放和共享。它允许用户查看、修改和分发软件的源代码。开源软件通常遵循特定的许可协议,如GPL、MIT、Apache等,这些协议规定了用户对源代码的使用、修改和分发的权利和限制。开源软件的特点包括:1. 源代码开放:用户可以查看软件的源代码,了解其内部工作原理。2. 自由修改...

云计算在生活中的应用,重塑数字生活体验

云计算在生活中的应用,重塑数字生活体验

云计算的应用使得我们的生活更加便捷、高效,同时也带来了新的挑战和机遇。云计算在生活中的应用:重塑数字生活体验随着信息技术的飞速发展,云计算已经成为推动社会进步的重要力量。它不仅为企业提供了强大的计算能力,更为我们的生活带来了前所未有的便捷和高效。本文将探讨云计算在生活中的广泛应用,以及它如何重塑我们...

云计算市场,云计算市场的崛起与未来趋势

云计算市场,云计算市场的崛起与未来趋势

云计算市场是一个快速增长且前景广阔的领域。以下是关于云计算市场的概述、规模和趋势的详细信息: 云计算市场概述云计算服务通过互联网提供灵活、高效且成本可控的计算资源,包括服务器、存储、数据库、网络和软件等。这种服务模式极大地简化了企业的IT基础架构管理,使企业无需前期投资购买物理服务器和运行自有软件,...