q09*_*987 13 opengl line antialiasing
我需要在OpenGL中绘制一条平滑的线,这就是我所做的:
glEnable( GL_LINE_SMOOTH );
glEnable( GL_POLYGON_SMOOTH );
glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );
glHint( GL_POLYGON_SMOOTH_HINT, GL_NICEST );
glBegin( GL_LINE_STRIP );
for( UINT uiPoint = 0; uiPoint < iNumPoints; ++uiPoint )
{
const Coord &Node = vecPoints[uiPoint];
glVertex3f( Node.x, Node.y, Node.z );
}
glEnd();
Run Code Online (Sandbox Code Playgroud)
我还能做什么?
Gre*_*hen 22
您还需要启用混合以使线条平滑工作.尝试:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)
然后绘制线条.将线宽设置为非整数宽度也可能有所帮助.
正如其他人所提到的,这不会使多边形边缘平滑,但会产生抗锯齿线.
Cal*_*602 12
您可以生成薄的,面向屏幕的多边形,并根据到线的距离设置片段的alpha.
示例:
a (0,1) b (0,1)
+--------------------------------------+
A | | B
----+--------------------------------------+----
| |
+--------------------------------------+
d (0,0) c (0,0)
Run Code Online (Sandbox Code Playgroud)
假设您要绘制段[AB].
(或多或少ShaderX5中使用的技术)
但只有在您不能使用MSAA时才这样做.
GL_POLYGON_SMOOTH本身对你没有好处.创建OpenGL上下文时,需要强制进行抗锯齿处理.你用什么来创建OpenGL窗口?看它是否支持其参数中的抗锯齿.或者您可以使用Nvidia或ATI工具强制所有OpenGL程序的抗锯齿......这一切都取决于您的设置.
正如提到的另一个答案,启用抗锯齿有帮助 - 如何启用它取决于您的上下文创建,但此信息有望对 GLFW 用户有用。
如果使用 GLFW 2:
glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);
如果使用 GLFW 3:
glfwWindowHint(GLFW_SAMPLES, 4);
...或您喜欢的任何数量的抗锯齿样本。以上提示需要在打开GLFW窗口之前进行设置。