有没有一种方法可以计算碎片着色器中某个东西的dFdx(dFdx())



所以我已经知道dFdx、dFdy和fwidth的文档中指出:;暗示诸如dFdx(dFdx(n((的高阶导数的表达式具有未定义的结果,诸如dFdx(dFdy(n(的混合阶导数也是如此"如果这样的表达式是未定义的,是否可以在片段着色器中获得某个表达式的高阶导数?

我听说dFdx从相邻的片段中获取信息,并找到邻居的值和这个片段的值之间的差异。也许有一种方法可以手动从相邻的碎片中获取信息?

我认为有一个公式可以用来求二阶导数:

(f(x+h,y+h) - f(x+h,y) - f(x,y+h) + f(x,y))/h^2

但我的问题是,我们如何得到术语f(x+h,y+h)f(x+h,y)f(x,y+h)?我们如何也得到h,它是碎片之间的距离?

也许有一种方法可以手动从相邻片段中获取信息?

即使你可以(通过一些子群扩展,你可以(,这也无济于事。

片段着色器在2x2四边形中执行调用,每组4个调用直接相邻。导数函数仅取四边形中水平/垂直片段中的数据之间的差。如果四边形中的一个或多个片段恰好在被光栅化的基元的区域之外,它仍然会被执行(以便计算导数(,但它没有可见的效果。这些被称为";助手调用。

无论如何,一个quad中的调用只能与同一quad中的其他调用对话。如果你想得到更高阶的导数,你需要从不止一个相邻的片段中进行采样。

最新更新