GPU绘制的三角形宽度占用15个像素而不是16个像素的原因是什么?

Luc*_*cas 1 vulkan

我想在160*160的彩色附件中画一个三角形。协调是

\n
-1.0,1.0,0.0\n-0.9,0.9,0.0\n-0.8,1.0,0.0\n
Run Code Online (Sandbox Code Playgroud)\n

在我看来,三角形的宽度是0.2,所以它应该占据16个像素。\n但结果是15。\n在此输入图像描述

\n

我想知道GPU如何处理这种情况?我可以找到一些算法或公式\xef\xbc\x9f

\n

ybu*_*ill 5

三角形的边缘恰好穿过像素中心(在半整数坐标处)。因此,无法很好地确定边缘上的那些像素是否属于三角形。

一个适用的规则是,共享边缘的三角形必须对该边缘上的像素精确地光栅化一次,以防止混合产生伪影等。实现的方式是在单独光栅化每个三角形时包括左边缘并排除右边缘(例如)。

请注意,这仅适用于样本恰好位于边缘时的平局决胜。如果将三角形提高四分之一像素,则所有样本都将明确位于三角形内部或外部,并且其表观宽度将如您所期望的那样。

为了清楚起见,下面是一个图表,其中三角形绘制在 60x60 帧缓冲区上。菱形表示每个像素内样本的位置。白色菱形位于三角形之外,因此没有阴影。黑色菱形被确定位于三角形内,因此被加阴影。红色菱形恰好位于右边缘,并且被认为位于三角形之外,如前所述,因此它们也没有被遮挡。结果是三角形在屏幕上的宽度只有五个像素,而不是您期望的六个:

图表