据我了解,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);
问题是,我做错了什么?
我相信你的意图是正确的,但执行却是错误的。据我了解,问题来自于您对 SDL_RenderGeometry() 函数的使用。
这是因为该函数绘制的三角形有三个点,而您输入了四个点。要解决这个问题,可以使用 6 个点来渲染两个三角形,或者弄清楚索引是如何工作的。
索引告诉渲染器绘制点的顺序。这些可以帮助减少重复的顶点。
如何使用此功能的示例是:
unsigned int indices[] = {
0,1,2
2,3,0
};
SDL_RenderGeometry(renderer, nullptr, vertices, 4, indices, 6);
索引告诉渲染器要访问顶点数组的哪个索引。
这个新代码将使用索引数组中指定的顺序。如果您想更深入地了解 SDL_RenderGeometry() 函数,请参阅文档。