重心坐标的 Vulkan 计算?面积函数是二维的还是三维的?

Vulkan calculation of Barycentric coordinates? Is area function 2D or 3D?

在 Vulkan 规范的第 25.8.1 节基本多边形光栅化中说:

Barycentric coordinates are a set of three numbers, a, b, and c, each in the range [0,1], with a + b + c = 1. These coordinates uniquely specify any point p within the triangle or on the triangle’s boundary as

p = a * p_a + b * p_b + c * p_c

where p_a , p_b , and p_c are the vertices of the triangle. a, b, and c are determined by:

a = A(p, p_b, p_c) / A(p_a, p_b, p_c)
b = A(p, p_a, p_c) / A(p_a, p_b, p_c)
c = A(p, p_a, p_b) / A(p_a, p_b, p_c)

where A(l,m,n) denotes the area in framebuffer coordinates of the triangle with vertices l, m, and n.

从技术上讲,帧缓冲区坐标由三个部分组成。这在 24.5 控制视口中指定为:

The vertex’s framebuffer coordinates (x_f , y_f , z_f ) are given by [snip]

A函数的公式究竟是什么?

是否是:

(a) 同25.8.1中给出的计算三角形是反面还是正面的公式,即:

a = -0.5 * sum_i(x_f[i] * y_f[i+1] - x_f[i+1] * y_f[i])

也就是说,A的forumla没有使用其参数的z_f部分,而纯粹是(x_f, y_f)部分的函数,这是否被理解为阅读? (即计算三角形二维投影到framebuffer中x-y平面的面积-space)

或 (b),A 是否使用所有三个帧缓冲区组件?即Areturn完整三维帧缓冲区中三角形的面积-space(如图所示here例如)

或 (c) 其他?

从数学上讲,这实际上并不重要。无论您选择哪个函数,您都会发现在计算重心坐标时,数学的细节会发生变化。

重心坐标是通过取两个面积的比率来计算的。如果用相同的投影从3Dspace线性投影两个共面三角形到2Dspace,它们的面积比不变(假设它们有一个面积post-投影) .