gpt4 book ai didi

opengl - MSAA 的抗锯齿问题,绘制具有深度和 FBO 的 CSG

转载 作者:行者123 更新时间:2023-12-04 12:58:36 30 4
gpt4 key购买 nike

我重新实现了 OpenCSG对于现代 OpenGL 版本。

像素格式属性:

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,没有结果)

简单算法金羽:
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;
}

enter image description here

看起来 FBO 的纹理不够清晰或尺寸不合适。

编辑:
这些线仅出现在减去网格的重叠位置。

编辑 2:
修复了渲染到非 MSAA FBO 并在结果上应用 FXAA。

最佳答案

不确定我的解释是否正确。你从着色器中采样什么样的纹理?

我不知道您正在实现的算法的具体细节,但如果该纹理包含先前已完成多样本收集的某些计算的结果,我真的不确定您是否可以将该结果用于整个片段(以及所有其样本)。蒙版会在边缘褪色,这似乎是这里的问题。

也许您应该“手工”进行样本收集,例如使用 sampler2DMS 并在着色器中使用 texelFetch 读取单个样本。

另一种解决方案可能是在第一遍中将 gl_SampleMask 设置为全 1,以防止在边界处褪色。

关于opengl - MSAA 的抗锯齿问题,绘制具有深度和 FBO 的 CSG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198855/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com