我在编译openGl代码时遇到了一个问题。问题是,我想实现全景抗锯齿,我不知道如何。我从Nvidia控制面板开启了强制抗锯齿,这才是我真正想要获得的。我现在用GL_POLYGON_SMOOTH做。显然它没有效率和好看。以下是问题
1)我应该使用多次采样吗? 2)管道中的哪个部分openGl混合了抗锯齿的颜色? 3)除了GL _ * _ SMOOTH和多重采样之外还存在哪些替代方案?
答案 0 :(得分:5)
GL_POLYGON_SMOOTH 不是进行全屏AA(FSAA)的方法。
在这种情况下,不确定你的意思是“效率不高”,但它肯定不好看,因为它倾向于在网格中间混合(在三角形边缘)。
现在,关于FSAA和你的问题:
glBlendFunc
等人控制。实际上,这不是硬件中发生的情况。通常,您只写入示例缓冲区(并且硬件通常会尝试压缩数据),并且在使用它时,GL实现将在使用发生之前立即解析完整缓冲区。如果您实际直接使用样本缓冲区(根本不需要解析),这也会有所帮助。答案 1 :(得分:3)
我在这里写了一篇关于此的帖子:Getting smooth, big points in OpenGL
在选择像素格式或视觉效果时,您必须在创建OpenGL上下文之前指定WGL_SAMPLE_BUFFERS和WGL_SAMPLES(或XOrg / GLX的GLX前缀)。
在Windows上,如果您想要具有扩展特征的像素格式,请确保使用wglChoosePixelFormatARB()
,而不是来自GDI / GDI +的ChoosePixelFormat()
。必须使用ICD驱动程序中的wglGetProcAddress查询wglChoosePixelFormatARB,因此您需要事先创建一个虚拟OpenGL上下文。即使在OpenGL上下文被破坏后,WGL函数指针也是有效的。
WGL_SAMPLE_BUFFERS是一个布尔值(1或0),用于切换多重采样。 WGL_SAMPLES是您想要的缓冲区数。通常为2,4或8。