SDL_RenderGeometry 渲染三角形而不是四边形

问题描述 投票:0回答:1

据我了解,SDL2的函数

SDL_RenderGeometry
可以渲染具有任意数量顶点的多边形。渲染三角形对我有用。尝试渲染具有 4 个以上顶点的多边形失败。

以下代码按照预期呈现一个实心三角形:

    SDL_Vertex vertex_1 = {{10, 10}, {255, 0, 0, 255}, {1, 1}};
    SDL_Vertex vertex_2 = {{20, 10}, {255, 0, 0, 255}, {1, 1}};
    SDL_Vertex vertex_3 = {{10, 20}, {255, 0, 0, 255}, {1, 1}};

    SDL_Vertex vertices[] = {
        vertex_1,
        vertex_2,
        vertex_3
    };

    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    SDL_RenderClear(renderer);

    SDL_RenderGeometry(renderer, nullptr, vertices, 3, NULL, 0);

    SDL_RenderPresent(renderer);

但是,通过简单地添加另一个顶点来渲染正方形,程序会失败。没有渲染任何内容,也没有生成错误:

    SDL_Vertex vertex_1 = {{10, 10}, {255, 0, 0, 255}, {1, 1}};
    SDL_Vertex vertex_2 = {{20, 10}, {255, 0, 0, 255}, {1, 1}};
    SDL_Vertex vertex_3 = {{20, 20}, {255, 0, 0, 255}, {1, 1}};
    SDL_Vertex vertex_4 = {{10, 20}, {255, 0, 0, 255}, {1, 1}};

    SDL_Vertex vertices[] = {
        vertex_1,
        vertex_2,
        vertex_3,
        vertex_4
    };

    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    SDL_RenderClear(renderer);

    SDL_RenderGeometry(renderer, nullptr, vertices, 4, NULL, 0);

    SDL_RenderPresent(renderer);

问题是,我做错了什么?

c++ graphics rendering sdl sdl-2
1个回答
0
投票

我相信你的意图是正确的,但执行却是错误的。据我了解,问题来自于您对 SDL_RenderGeometry() 函数的使用。

这是因为该函数绘制的三角形有三个点,而您输入了四个点。要解决这个问题,可以使用 6 个点来渲染两个三角形,或者弄清楚索引是如何工作的。

索引告诉渲染器绘制点的顺序。这些可以帮助减少重复的顶点。

如何使用此功能的示例是:

unsigned int indices[] = {
   0,1,2
   2,3,0
};
SDL_RenderGeometry(renderer, nullptr, vertices, 4, indices, 6);

索引告诉渲染器要访问顶点数组的哪个索引。

这个新代码将使用索引数组中指定的顺序。如果您想更深入地了解 SDL_RenderGeometry() 函数,请参阅文档。

© www.soinside.com 2019 - 2024. All rights reserved.