OpenGL中的线条流畅

DJC*_*rth 1 java opengl jogl

我正在尝试在OpenGL中绘制一个或多或少平滑的多段线.然而,我发现如果线的厚度大约为3,则段之间的连接不是无缝的.他们之间有时会有差距.是否有一种很好的方法可以使这些连接平滑无间隙?我正在寻找类似于Java中的BasicStroke.JOIN_MITER的东西.

Mar*_*arc 5

使用OpenGL绘制思考线的最一致和最便携的方法是使用相机对齐(否则称为广告牌)多边形.OpenGL API的不同实现以不同方式处理行的端点,并GL_LINE_SMOOTH根据平台产生截然不同的结果.一些实现认为厚度大于1的线是不明确的.如glLineWidth联机帮助页中所述:[对于抗锯齿线条]仅保证支持宽度1; 其他人依赖于实施.

话虽这么说,我使用了一个简单的2通道黑客来解决这个问题.

  1. 禁止写入深度缓冲区glDepthMask(GL_FALSE)
  2. 绘制所需厚度的平滑线条
  3. 在线的相同大小的所有线的端点处绘制平滑点.(可能不需要此步骤来填补空隙,但是它应该使线条相交的点变圆并使一切看起来更平滑)
  4. 重新启用深度缓冲区以写入glDepthMask(GL_TRUE)

您可能还想使用深度缓冲设置.线之间的"间隙"可能是由于第二行未对与背景进行alpha混合的像素进行深度测试.