在Direct3D中填写文本大纲

时间:2011-05-09 09:08:07

标签: text directx gdi+ rendering direct3d

我很惊讶谷歌没有对此有所了解。

我正在使用Direct3D创建一个简单的CAD查看器。由于它的性质(缩放功能等),文本元素必须是矢量文本;我不能使用纹理多边形。

我已经调用了gdi32.dll来获取字形,并从直线和贝塞尔曲线创建非常合理的文本轮廓,但是文本不是固定的,并且点不一定是常规的。封闭字符(b,p,o,A等)实际上有多个单独的轮廓。

因此,我不能将这些点射入顶点缓冲区并指定基本类型。

此刻我所能做的就是将轮廓线条渲染为线条,从而产生神圣的文字。

有人能提出一个很好的策略,用它们的轮廓渲染实体矢量文本吗?

请注意,我将贝塞尔曲线插入点列表(许多人使用着色器/巫术)。

2 个答案:

答案 0 :(得分:1)

您没有提到您正在使用的DirectX版本,但实用程序函数D3DXCreateText将为任何TrueType字体的给定文本创建3D网格。如果您想要2D版本,只需使用无或最小的挤出和直接正交投影。

如果您需要明确的轮廓,您可以(a)将此方法与您已有的轮廓相结合,(b)以略微不同的比例(取决于当前缩放级别)或(c)绘制文本两次)使用着色器绘制像素完美的轮廓。

您所追求的精确外观的屏幕截图可能有所帮助。我的CAD图纸都有纯文字,没有轮廓。

答案 1 :(得分:0)

我正在使用D3DXCreateText(Win32,DX9)创建文本网格。它们很好地旋转。但是,无论在DC中选择的字体高度如何,它们似乎总是相同。

较小字符的网格线有别名,在没有多重采样的情况下在视频卡上看起来不太好。