我正在尝试在OpenGL中绘制一个或多或少平滑的多段线。然而,我发现如果线的厚度大约为3,则段之间的连接不是无缝的。他们之间有时会有差距。是否有一种很好的方法可以使这些连接平滑无间隙?我正在寻找类似于Java中的BasicStroke.JOIN_MITER的东西。
答案 0 :(得分:5)
使用OpenGL绘制思考线的最一致和最便携的方法是使用相机对齐(否则称为广告牌)多边形。 OpenGL API的不同实现以不同方式处理行的端点,GL_LINE_SMOOTH
根据平台产生截然不同的结果。一些实现认为厚度大于1的线是不明确的。如glLineWidth联机帮助页中所述:[对于抗锯齿线条]仅保证支持宽度1;其他人则依赖于实施。
话虽这么说,我已经使用了一个简单的2通道黑客来解决这个问题。
您可能还想使用深度缓冲设置。这些线之间的“间隙”可能是由于第二行未能对与背景进行alpha混合的像素进行深度测试。
答案 1 :(得分:1)
根据OpenGL实施的质量,结果可能会有所不同。我注意到不同实现中的平滑线有很多不同。
您可能希望使用不同的策略来绘制线段,例如使用细多边形。
答案 2 :(得分:1)
使用GL_LINE_SMOOTH启用消除锯齿会改变略微绘制线条的方式。你可以尝试一下。另请注意,需要启用混合才能使其正常工作。
最重要的是,您无法控制使用细长方形绘制线条的各个方面可能会更好,并且在您编写自己的DrawThickLine函数后,它将不再是任何工作..
答案 3 :(得分:1)
绘制四边形,并使用纹理或片段着色器来点画。片段着色器也可以提供抗锯齿。
答案 4 :(得分:0)
将每条线的厚度拉过一半。这应该删除'间隙',虽然它会提供更清晰的线连接而不是更平滑的线连接。
答案 5 :(得分:0)
为了获得平滑的效果,您可能需要求助于Bezier曲线或其他形式的样条曲线。我很惊讶这不是内置于OpenGL中,但该网站有一个example program to generate Bezier curves using OpenGL。