是否可以始终绘制1像素(设备无关)line directd?

时间:2012-12-16 21:58:39

标签: direct2d sharpdx

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

我的问题是我的变换具有截然不同的水平和垂直尺寸,看起来我只能缩放其中一个尺寸的strokeWidth。

我可以将变换设置为Identity,并使用矩阵变换点将每个点转换为与设备无关的坐标,从而实现正确的结果,但不会将工作卸载到GPU。

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

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

1 个答案:

答案 0 :(得分:2)

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

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