提问人:Omer A 提问时间:11/6/2023 最后编辑:genpfaultOmer A 更新时间:11/7/2023 访问量:57
SDL_RenderGeometry呈现三角形,但不呈现四边形
SDL_RenderGeometry renders triangle but not quad
问:
据我了解,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);
问题是,我做错了什么?
答:
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 int
unsigned int
评论