OpenGL绘制点画线异常:直线正常曲线断裂问题咨询
问题分析与解决方案
我来帮你定位这个多边形轮廓断裂的核心问题——你选错了OpenGL的图元绘制模式!
核心原因:GL_LINES的绘制逻辑不适合连续轮廓
GL_LINES的工作方式是把顶点按顺序两两分组,每组绘制一条独立线段:
- 顶点0 → 顶点1,画第一条线
- 顶点2 → 顶点3,画第二条线
- 顶点4 → 顶点5,画第三条线
- ……
如果你的info.nPts是多边形的完整顶点数(比如数百个),这种模式只会画出info.nPts/2条互不连接的线段,中间自然会出现断裂,这和线宽、抗锯齿完全无关。
解决方案:更换正确的绘制模式
根据你的需求选择对应的图元:
- 如果是闭合的多边形轮廓(需要自动连接最后一个顶点到第一个顶点):把
GL_LINES换成GL_LINE_LOOP - 如果是开放的折线(不需要闭合):换成
GL_LINE_STRIP
修改后的关键代码行:
// 闭合轮廓用这个 glDrawArrays(GL_LINE_LOOP, 0, info.nPts); // 开放折线用这个 // glDrawArrays(GL_LINE_STRIP, 0, info.nPts);
额外排查点(如果换模式后仍有问题)
- 确认
info.nPts是正确的顶点总数,没有少算、多算或者奇偶性错误(比如如果用GL_LINES,顶点数必须是偶数才会全部绘制,但你用连续模式就不用管这个) - 检查
vertOfst指向的顶点数据是否连续、没有缺失或错误偏移 - 部分旧OpenGL驱动对大数量顶点的
GL_LINE_STIPPLE支持有问题,如果不需要点画线,可以先禁用它测试
内容的提问来源于stack exchange,提问作者Shaobo Zi
相关产品推荐
相关产品推荐

