area
本页内容 | * 导数选项 * 示例 |
---|
float area(vector p, ...)
这是一个比将Du(P)
长度乘以Dv(P)
长度更精确、更方便获取微多边形面积的方法。该函数通常用于获取以像素为单位的着色区域面积。
注意
此函数有效是因为VEX”知道”变量P
具有导数(dPdu
和dPdv
)。如果传入字面量向量而非特殊变量(如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})