directx - 线的 Direct2D/DirectX 光栅化规则

标签 directx direct2d

我已经阅读了关于 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 客户区的左上角看到一条可见的水平线,但我想了解这里涉及的原则。我无法从可用文档中找出它们。

最佳答案

你应该在“像素中间”画线:

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

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

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

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

关于directx - 线的 Direct2D/DirectX 光栅化规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51352532/

相关文章:

c++ - DirectWrite 对齐文本中心

c++ - 无法在 direct2d 项目中初始化 IWICImagingFactory

c++ - 多个渲染目标

C++ Direct 2D 如何调整 ID2D1Bitmap 的大小

windows - 激活窗口时收到的消息

c++ - ID2D1DeviceContext EndDraw D2DERR_WRONG_STATE 绘制矩形后

c++ - 无需源代码即可调试/绕过 BSOD

c# - WPF中的16位灰度图像显示

directx - 使用 Direct2D 更新部分屏幕

c++ - move 语义、标准集合和构造时间地址