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