为什么在查询二维纹理时,dFdx/ddx和dFdy/ddy是二维变量?

6

我似乎无法理解这个问题,按照我的理解,2D纹理/数组在U或V坐标上的导数/变化应该是单维度变量,因为我们只检查它沿着ddx(U坐标)或ddy(V坐标)方向的变化。

2个回答

7
这里有4个不同的偏导数:du/dx、dv/dx、du/dy和dv/dy。除非纹理图像坐标恰好与显示屏轴完全对齐,否则这四个值都不需要为零。一般情况下,纹理坐标轴不需要与屏幕显示轴对齐。X和Y(显示视口轴)不是U和V(纹理图像轴)相同的方向。
换句话说,将2D屏幕/视口坐标系与2D纹理/图像UV坐标系相关联的Jacobian矩阵包含4个条目:每个可调参数两个。

这是我见过的关于ddx、ddy和纹理最清晰的解释。再深入一点:vec2 dx_vtc = dFdx(texture_coordinate); dx_vtc由du/dx和dv/dx这两个分量组成吗? - Nims
@Nims 是的,我理解的就是这样:[du/dx, dv/dx] = dFdx([u, v]) - Christopher Bruns

0

您正在计算一个变量(例如纹理的UV坐标)相对于屏幕空间在x或y方向上的导数。换句话说,您可以说该函数回答了这个问题:“当我向[左侧]/[上方]移动一个像素时,这个变量会发生什么变化?”


我还是不明白,因为你说这是在x或y方向上计算的,而不是同时计算。所以当我只向左移动一个像素时,ddx将会发生变化,或者是我有一些基本误解吗? - Nims

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接