opengl - 如何在片段着色器中使用带有“返回”的多重采样?
问题描述
我通过深度剥离绘制透明图形,当我渲染到多重采样时结果很难看(出现网格)
vec4 fragColor = texelFetch(frontTexture, ivec2(gl_FragCoord.xy), 0);
if (gl_FragCoord.z < nearestDepth) {
// Skip this depth in the peeling algorithm
return;
}
fragColor += someColor;
没有“如果返回”,一切都很好(但我需要这个“如果”)。网格与我使用带有非均匀流控制的 mipmapping 时完全相同。
解决方案
仅在片段语言中可用,gl_FragCoord 是一个输入变量,其中包含片段的窗口相对坐标 (x, y, z, 1/w) 值。如果是多重采样,这个值可以是像素内的任何位置 [ !!! ]
PS 深度剥离使用严格的深度比较,如果我们获得“像素内任何位置”的深度是不可能的。代替
if (gl_FragCoord.z < nearestDepth)
利用
if (gl_FragCoord.z < nearestDepth - 0.0001)
(这是第一个粗略的解决方案)
推荐阅读
- perl - 删除 sed/awk/perl 中的最后一个分隔符
- python - 普通 Pandas Dataframe Pivot
- c# - 有没有办法简化这个三元表达式?
- google-apps-script - 根据输入的条件显示过滤的游戏列表的脚本?(谷歌电子表格
- angular - 如何在 Ionic4 的 Angular 6 中的变量中设置 storageservice 值“store_id”
- laravel - 如何将 base64 图像转换为 UploadedFile Laravel
- google-bigquery - BigQueryHook 作业失败并出现错误:7916072
- c++ - 使用可变参数模板传递指向成员的指针
- image - 如何在 Apache Royale 中设置元素的“z-index”(相当于 Flex 中的 setElementIndex)?
- c++ - 更大的运算符“>”是否满足严格的弱排序?