跳转到内容

area

本页内容* 导数选项 * 示例

float  area(vector p, ...)

这是一个比将Du(P)长度乘以Dv(P)长度更精确、更方便获取微多边形面积的方法。该函数通常用于获取以像素为单位的着色区域面积。

注意 此函数有效是因为VEX”知道”变量P具有导数(dPdudPdv)。如果传入字面量向量而非特殊变量(如P),将返回0,因为VEX无法访问其导数。

导数选项

derivatives-options

计算导数的函数接受额外参数,用于调整导数计算方式。

extrapolate”, int =0

控制导数是否在面片边界”平滑”过渡。多数情况下应启用,若开启外推,对于C2连续曲面导数计算将是精确的。但当VEX变量高频变化时(如高频位移贴图导致P变量高频变化),导数计算的外推可能会放大面片边界间的不连续性。

smooth”, int =1

非均匀调整面片上微分的大小。通常可减少位移/纹理着色器中面片的不连续性。但在某些特殊情况下可能需要关闭此功能。

N = computenormal(P, "extrapolate", 1, "smooth", 0);

示例

examples

返回当前微多边形在相机空间中的面积:

area(P)

返回当前微多边形在NDC空间中的面积:

area(transform("ndc", P))

返回0,因为参数不是VEX已知导数的变量:

area({0.1, 2.3, 4.5})