我为现代OpenGL版本重新实现了OpenCSG。
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的问题。
答案 0 :(得分:0)
不确定我的解释是否正确。你在着色器中采样了什么样的纹理?
我不知道您正在实现的算法的具体细节,但如果该纹理包含已经完成多重采样采集的一些先前计算的结果,我真的不确定您是否可以将该结果用于整个片段(和所有的样品)。面具会在边缘褪色,这似乎是问题所在。
也许您应该“手动”进行样品采集,例如使用sampler2DMS并在着色器中使用texelFetch读取单个样本。
另一个解决方案可能是在第一遍中将gl_SampleMask设置为全1,以防止边界处的淡入淡出。