【发布时间】:2013-09-23 21:58:07
【问题描述】:
我想做一个卡通边框效果。为此,我将使用每个像素的相邻像素的深度值来确定它是否应该被涂黑。如何在片段着色器中访问该信息?
【问题讨论】:
-
可能想接受答案...
-
您也可以使用标准衍生扩展并使用 fwidth 或 dFdx。它只允许您访问某个值与另一个片段中的值的差异。让它完全没用的是它只能访问同一个三角形中的相邻像素。
我想做一个卡通边框效果。为此,我将使用每个像素的相邻像素的深度值来确定它是否应该被涂黑。如何在片段着色器中访问该信息?
【问题讨论】:
当您以正常方式(顶点着色器,然后片段着色器 - 单通道)渲染场景时,在片段着色器中无法访问其他像素的深度值。
但是: 您可以渲染场景两次并执行一些后期处理效果。在第一次运行中,您将深度值和其他值(如法线等)存储在 RenderTarget(纹理中)中,然后在第二遍中使用这些纹理。
这里你有来自 XNA 的效果,但可以快速移植到 GLSL:http://xnameetingpoint.weebly.com/shader7f31.html
这里有一些关于渲染到纹理的链接:http://learningwebgl.com/blog/?p=1786
提示:深度值不足以进行边界检测,您还必须使用法线。但它在 XNA 的上述教程中有所介绍。
【讨论】: