2011-05-09 74 views
0

令我惊讶的是,Google对此没有多少提示。在Direct3D中填充文字轮廓

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

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

因此,我不能只将点投射到顶点缓冲区并指定基本类型。

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

任何人都可以提出一个很好的策略,用它们的轮廓呈现固体矢量文本吗?

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

回答

1

您没有提及您正在使用的DirectX版本,但效用函数D3DXCreateText将为任何TrueType字体的给定文本创建3D网格。如果你想要一个2D版本,只需使用无或最小的挤压,以及直接正交投影。 (a)将此方法与已有的大纲相结合,(b)以略微不同的比例(取决于当前缩放级别)或( c)使用着色器绘制像素完美的轮廓。

您所处的确切外观的屏幕截图可能有所帮助。我的CAD图纸都有坚实的文字,没有轮廓。

+0

Direct3D 9通过SlimDX,但我似乎无法找到D3DXCreateText在它的任何地方;我假设他们没有暴露它。 – 2011-05-12 10:30:09

+1

根据源代码,SlimDX通过[Mesh.CreateText()](http://slimdx.mdxinfo.com/latestdocs/Default.aspx?topic=Class+Reference%2fSlimDX.Direct3D9+Namespace%2fMesh+Class)公开它。 – 2011-05-13 04:24:50

0

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

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