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 矩形,它将精确覆盖像素。
我已经阅读了有关 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 矩形,它将精确覆盖像素。