0

我需要在 OpenGL 中进行平滑处理。我找到了这段代码

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glShadeModel(GL_SMOOTH); 

glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST); 
glEnable(GL_POLYGON_SMOOTH);

glDisable( GL_DEPTH_TEST ); 
glEnable( GL_ALPHA_TEST ); 

在这种情况下,平滑是有效的,但我不需要透明度。我认为这 2 行负责透明度:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

但是如果我删除这个字符串 - 平滑不起作用。我需要留下什么来平滑?我只需要在我的项目中平滑,不需要混合......

4

1 回答 1

1

好吧,使用透明度进行平滑处理,边缘既没有颜色也没有颜色,但它们......嗯......透明。看看这些图片:

平滑线 不平滑的线

正如你所看到的,右边的线没有被平滑,它的像素要么完全不透明,要么完全透明。左边的线是平滑的,它的外部像素是透明的。

你可以看看在你的程序中强制使用抗锯齿,AA 是一个硬件/驱动程序功能,它只管理边缘的平滑(并且,取决于 AA 的类型,其他事情)。请记住,这不是 OpenGL 的特性,而是硬件、驱动程序和操作系统的特性。通常,当您创建 OpenGL-Context 时,您会请求 AA 之类的东西。

于 2013-06-24T19:14:08.553 回答