You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:16:02