我在渲染目标上使用 DrawLine 函数,并且希望始终绘制一条(与设备无关)像素粗的线。
我的问题是我有一个变换,它的水平和垂直尺寸大不相同,看来我只能为这些尺寸之一缩放 strokeWidth。
我可以将变换设置为标识,并使用矩阵变换点将每个点转换为我的设备独立坐标,从而获得正确的结果,但工作并没有被卸载到 GPU。
有没有办法做到这一点,以便我可以让渲染目标上的转换完成工作?
我正在使用 C# 中的 SharpDX,但我很乐意翻译任何 c++ 答案。
您应该能够利用转换ID2D1RenderTarget
是绝对的这一事实。没有推送/弹出系统,您始终可以将转换设置为单位矩阵。有了这些知识,您应该能够 1)创建您想要的几何图形,2)通过渲染目标上的矩阵对其进行转换(ID2D1Factory::CreateTransformedGeometry()
尽管您是正确的,这不是硬件加速的),3)设置渲染目标的转换为单位矩阵,4) 绘制具有 1px 笔划宽度的几何图形,5) 将原始转换恢复到渲染目标上。
此外,Win8 附带的 Direct2D 版本具有一些功能,可以让您始终使用 1px 宽的线进行绘制,而不管变换如何。您创建一个笔触样式并D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE
为 transformType 指定。