我已经为现代OpenGL版本重新实现了OpenCSG。MSAA的反锯齿问题,绘制深度和FBO的CSG
PixelFormatAttributes:
NSOpenGLPFAColorSize , 24 ,
NSOpenGLPFAAlphaSize , 8 ,
NSOpenGLPFADepthSize , 32 ,
NSOpenGLPFAStencilSize , 8 ,
NSOpenGLPFAAccelerated ,
NSOpenGLPFADoubleBuffer ,
NSOpenGLPFASupersample ,
NSOpenGLPFASampleBuffers, 1 ,
NSOpenGLPFASamples , 4 ,
FBO规格:(试图渲染到FBO与多重采样,但线条变得更加强烈和明显,旁观的截图显示在底部)
- 创建纹理2的幂, GL_RGBA(试过GL_RGBA8和GL_RGBA32F)
- GL_DEPTH24_STENCIL8(试过GL_DEPTH32_STENCIL8,没有结果)
简单算法Goldfeather:
while (i < depth complexity) {
take channel for render
merge layers if no free channel
render each layer with stencil func, mask and depth params to channel (FBO)
}
merge layers (taking texture from FBO and render objects again with applying shader below)
在着色器我有代码用于合并(从FBO结果纹理渲染用于测试的顶部重叠,在OpenCSG it's setupProjectiveTexture):
vec2 ndcPos = gl_FragCoord.xy/sizetexture.xy;
vec4 maskColor = texture2D(maskTexture, ndcPos.xy);
if (maskColor[channel] < 0.5) {
discard;
}
看起来像FBO没有足够清晰的纹理或不正确的尺寸。
编辑:
这些线只出现在重叠减去目的地。
编辑2:
与呈现给非MSAA FBO和结果施加FXAA固定。
32位色彩缓冲区+ 8位阿尔法让我特别不寻常。通常像素格式设置如下:32位(8位未使用)RGB + 0 A或24位RGB + 8位A,几乎从不32位RGB + 8位A(产生40位颜色缓冲)。它应该没有什么不同,因为CGL会匹配最接近的格式,但是你要求它有些奇怪的东西。 –
@ AndonM.Coleman其实你是对的,会改变!但它没有解决我的问题。我发现了几篇关于如何解决类似问题的文章: 1. http://www.alphanew.net/index.php?section=articles&site=multisampling 2. http://mtnphil.wordpress.com/2013/06/ 26/know-your-ssao-artifacts/ 但对我来说很难完全理解,因为我不是母语的人。也许以后会明白。 – SAKrisT
顺便说一句,当你以你的像素格式指定'Supersample'时,你要求GL取代SSAA而不是MSAA。这是OS X;我在OS X上从未遇到过支持超采样的硬件加速像素格式,只有软件渲染器。我建议你从像素格式中删除它。在这一点上,这变得相当挑剔,但由于现在问题中唯一的信息与像素格式有关...... :) –