我已经重新实现了OpenCSG,以适应现代OpenGL版本。
像素格式属性:
FBO规格:(尝试使用多重采样的FBO进行渲染,但是线条更加明显和可见,请查看底部的截图)
- 创建2次幂大小的纹理,GL_RGBA(尝试过GL_RGBA8和GL_RGBA32F)
- GL_DEPTH24_STENCIL8(尝试过GL_DEPTH32_STENCIL8,没有结果)
简单算法Goldfeather:
编辑:
这些线条只出现在相交的减法网格上。 编辑2:
通过渲染到非MSAA FBO并在结果上应用FXAA进行修复。
像素格式属性:
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中设置投影纹理):
vec2 ndcPos = gl_FragCoord.xy / sizetexture.xy;
vec4 maskColor = texture2D(maskTexture, ndcPos.xy);
if (maskColor[channel] < 0.5) {
discard;
}
编辑:
这些线条只出现在相交的减法网格上。 编辑2:
通过渲染到非MSAA FBO并在结果上应用FXAA进行修复。