2011-05-09 73 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中選擇的字體的高度如何,它們似乎總是相同的大小。

較小字符的網格線是別名,在沒有多重採樣的視頻卡上看起來不太好。