SDL_RenderGeometry呈现三角形,但不呈现四边形

SDL_RenderGeometry renders triangle but not quad

提问人:Omer A 提问时间:11/6/2023 最后编辑:genpfaultOmer A 更新时间:11/7/2023 访问量:57

问:

据我了解,SDL2 的函数可以呈现具有任意数量顶点的多边形。渲染三角形对我有用。尝试渲染具有 4+ 个顶点的多边形失败。SDL_RenderGeometry

以下代码呈现一个填充的三角形,如预期的那样:

    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++ SDL

评论


答:

1赞 Hextav 11/6/2023 #1

我相信你的意图是正确的,但执行是错误的。据我了解,问题出在你对该函数的使用上。SDL_RenderGeometry()

这是因为该函数绘制了三角形,这些三角形有三个点,但您输入了四个点。要解决此问题,请使用 6 个点来呈现两个三角形,或者弄清楚索引的工作原理。

索引告诉渲染器以什么顺序绘制点。这些可以通过减少重复的顶点来提供帮助。

如何使用它的示例是:

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

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

此新代码将使用 indices 数组中规定的顺序。如果您想更深入地了解该功能,请参阅文档。SDL_RenderGeometry()

评论

1赞 Omer A 11/6/2023
是的,这解决了我的问题,谢谢。但是,我发现您需要使用类型而不是才能使其工作。再次感谢!const intunsigned int