我已经重新实现了OpenCSG http://www.opencsg.org适用于现代 OpenGL 版本。
PixelFormat属性:
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 它的 setupProjectiveTexture https://github.com/openscad/OpenCSG/blob/master/src/channelManager.cpp):
vec2 ndcPos = gl_FragCoord.xy / sizetexture.xy;
vec4 maskColor = texture2D(maskTexture, ndcPos.xy);
if (maskColor[channel] < 0.5) {
discard;
}
看起来 FBO 纹理不够清晰或尺寸不合适。
EDIT:
这些线仅出现在减去网格的重叠位置。
EDIT 2:
修复了渲染到非 MSAA FBO 并对结果应用 FXAA 的问题。