SDL_RenderGeometry可渲染三角形但无法渲染四边形问题求助
问题原因与解决方法
SDL_RenderGeometry 默认采用三角形列表的渲染逻辑:当你不传索引数组(NULL)时,它会按顺序将每3个顶点组合成一个三角形进行绘制。对于4个顶点的情况,它只会处理前3个顶点生成一个三角形,剩下的第4个顶点被忽略——这就是你看不到完整正方形的核心原因。
另外,建议你每次调用SDL_RenderGeometry后检查返回值,如果返回-1,用SDL_GetError()获取具体错误信息,能更快定位问题。
修正方案:提供索引数组拆分多边形
要渲染四边形(或任意N边形),你需要手动将多边形拆分为多个三角形,并通过索引数组告诉SDL顶点的组合方式。以正方形为例,我们可以把它拆成两个三角形:
// 正方形顶点 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}; // 索引数组:将正方形拆分为两个三角形 int indices[] = {0, 1, 2, 0, 2, 3}; SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDL_RenderClear(renderer); // 传递索引数组,指定6个索引(两个三角形) int result = SDL_RenderGeometry(renderer, nullptr, vertices, 4, indices, 6); if (result != 0) { printf("SDL_RenderGeometry error: %s\n", SDL_GetError()); } SDL_RenderPresent(renderer);
这段代码通过索引数组定义了两个三角形:
- 第一个三角形:顶点0(左下)、1(右下)、2(右上)
- 第二个三角形:顶点0(左下)、2(右上)、3(左上)
组合起来就能渲染出完整的红色正方形。
内容的提问来源于stack exchange,提问作者Omer A
相关产品推荐
相关产品推荐

