【发布时间】:2014-10-29 08:41:00
【问题描述】:
我在二维空间中有一个三角形。 我有每个顶点的屏幕空间坐标,并且我有每个顶点的属性值。
如何计算这些属性的 dFdx / dFdy?换句话说,屏幕像素之间的属性将如何变化。
//fragment shader
varrying vec2 myAttr;
void main(void)
{
vec2 px = dFdx(myAttr);
vec2 py = dFdy(myAttr);
}
我想得到 px,py。我需要从 x 和 y 轴的下一个像素知道myAttr 的增量(增长)。
我需要公式/算法如何手动计算它们(例如硬件不支持导数的情况)。
附: 3个顶点之间线性插值的属性值(根据OpenGL doc)。
【问题讨论】:
-
我不明白你在问什么。您的代码中已经有了 GLSL 内置函数 dFdx、dFdy。你还想要什么?如何手动计算的解释?
-
这是在 GLSL 中 :) 我需要公式来手动/在 CPU 上计算它们。
-
opengl 论坛上的这个帖子提出了一个非常相似的问题:opengl.org/discussion_boards/showthread.php/…。
-
导数表示每单位的变化率。你在这里的单位是像素之间的距离。变化是相邻点处函数值的差异。因此,这必须只是一个简单的近似除法,其中一个高阶公式(如“5 点模具”)而是在三个点上。
-
@huseyin tugrul buyukisik - 是的。而且我了解如何在两点之间进行线性插值。但我不知道如何在 3 之间进行插值。
标签: opengl math derivative