Direct2D/DirectX 线条的光栅化规则

Direct2D/DirectX rasterization rule for lines

我已经阅读了有关 DirectX 光栅化规则的在线文档,但我仍然不明白为什么这段代码没有在屏幕上显示任何内容?

target->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
target->DrawLine(D2D1::Point2F(0.f, 0.f), D2D1::Point2F(10.f, 0.f), redBrush, 1.f);

当然,如果我将两个线点的 y 从 0.0f 更改为 1.0f,我会在 Window 客户区的左上角看到一条可见的水平线,但我想了解什么这里涉及原则。我无法从可用文档中找出它们。

你应该划清界限 "in the middle of the pixel":

target->DrawLine(D2D1::Point2F(0.0f, 0.5f), D2D1::Point2F(10.f, 0.5f), redBrush, 1.f);

否则,如果您不使用抗锯齿,您的线可以绘制在 0/0...10/0 线的任一侧。在你的情况下,它被绘制在 window canvas.

之外

请注意,屏幕上的像素实际上是一个坐标为 D2D1::Point2F(0.0f, 0.0f)D2D1::Point2F(1.0f, 1.0f) 的矩形。

D2D1::Point2F(0.5f, 0.5f) 是该矩形的中心。如果围绕该坐标绘制 1x1 矩形,它将精确覆盖像素。