在SharpDX c#中围绕文本绘制笔划/轮廓的最快方法?

时间:2018-05-07 11:31:31

标签: c# sharpdx

我能够在sharpDX中围绕文本绘制笔划,但速度非常慢。

这是我的代码:

d2dRenderTarget.DrawTextLayout(new Vector2(298, 300), textLayout0, textBrush1,DrawTextOptions.NoSnap);

d2dRenderTarget.DrawTextLayout(new Vector2(302, 300), textLayout0, textBrush1, DrawTextOptions.NoSnap);

d2dRenderTarget.DrawTextLayout(new Vector2(300, 302), textLayout0, textBrush1, DrawTextOptions.NoSnap);

d2dRenderTarget.DrawTextLayout(new Vector2(300, 298), textLayout0, textBrush1, DrawTextOptions.NoSnap);

d2dRenderTarget.DrawTextLayout(new Vector2(300, 300), textLayout0, textBrush, DrawTextOptions.NoSnap);

这是我的输出:

enter image description here

还有其他解决办法在文本周围画出相同的东西吗?

2 个答案:

答案 0 :(得分:2)

距离字段字体也许正是您要找的。它是渲染超平滑可缩放位图字体的快速和定性技术。

SDF 的实施需要一些着色器编程知识。希望我的回答有帮助

答案 1 :(得分:0)

我会给你一个快速的故障以及我如何攻击它,这很可能根本不适合你当前的实现。但我发现更快。

我使用Codehead的位图字体生成器来使用纹理来渲染我的自定义渲染器。这适用于DirectX 11 Direct3d。然后我将这些作为图块渲染到屏幕空间的屏幕上。通常,着色器将是1到1像素的渲染,但在这种情况下,您希望使用不同的颜色边缘纹理。这本身类似于抗锯齿技术。为此,我使用了一个" Percentage Closer Filter"算法基本上采样5个点,每个方向加1个像素加中心。如果我在任何方向上返回1个黑色像素,那么我会相应地触及边缘和颜色。这里有更好的版本,但这就是我接触它的方式。

相关问题