我能够在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);
这是我的输出:
还有其他解决办法在文本周围画出相同的东西吗?
答案 0 :(得分:2)
距离字段字体也许正是您要找的。它是渲染超平滑可缩放位图字体的快速和定性技术。
在本文档中查看它;在那里你会发现像轮廓,发光,投影这样的文字效果:https://steamcdn-a.akamaihd.net/apps/valve/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf
SDF 的libgdx实现可以作为参考。您可以在此处找到它:https://github.com/libgdx/libgdx/wiki/Distance-field-fonts
SDF 的实施需要一些着色器编程知识。希望我的回答有帮助
答案 1 :(得分:0)
我会给你一个快速的故障以及我如何攻击它,这很可能根本不适合你当前的实现。但我发现更快。
我使用Codehead的位图字体生成器来使用纹理来渲染我的自定义渲染器。这适用于DirectX 11 Direct3d。然后我将这些作为图块渲染到屏幕空间的屏幕上。通常,着色器将是1到1像素的渲染,但在这种情况下,您希望使用不同的颜色边缘纹理。这本身类似于抗锯齿技术。为此,我使用了一个" Percentage Closer Filter"算法基本上采样5个点,每个方向加1个像素加中心。如果我在任何方向上返回1个黑色像素,那么我会相应地触及边缘和颜色。这里有更好的版本,但这就是我接触它的方式。