1

我在渲染目标上使用 DrawLine 函数,并且希望始终绘制一条(与设备无关)像素粗的线。

我的问题是我有一个变换,它的水平和垂直尺寸大不相同,看来我只能为这些尺寸之一缩放 strokeWidth。

我可以将变换设置为标识,并使用矩阵变换点将每个点转换为我的设备独立坐标,从而获得正确的结果,但工作并没有被卸载到 GPU。

有没有办法做到这一点,以便我可以让渲染目标上的转换完成工作?

我正在使用 C# 中的 SharpDX,但我很乐意翻译任何 c++ 答案。

4

1 回答 1

2

您应该能够利用转换ID2D1RenderTarget是绝对的这一事实。没有推送/弹出系统,您始终可以将转换设置为单位矩阵。有了这些知识,您应该能够 1)创建您想要的几何图形,2)通过渲染目标上的矩阵对其进行转换(ID2D1Factory::CreateTransformedGeometry()尽管您是正确的,这不是硬件加速的),3)设置渲染目标的转换为单位矩阵,4) 绘制具有 1px 笔划宽度的几何图形,5) 将原始转换恢复到渲染目标上。

此外,Win8 附带的 Direct2D 版本具有一些功能,可以让您始终使用 1px 宽的线进行绘制,而不管变换如何。您创建一个笔触样式并D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE为 transformType 指定。

于 2012-12-18T18:40:00.673 回答