2011-07-16 23 views
0

有沒有人知道directx中矢量字體的實現?Direct3d中的矢量文本渲染系統

如果沒有人有這個好的起始地點?

甚至任何使用基本縮放支持在Directx中編寫的閱讀器示例。

+0

也許您在尋找DirectWrite? http://msdn.microsoft.com/en-us/library/dd371554%28v=vs.85%29.aspx – RocketR

+0

不幸的是,我不得不爲此任務使用direct3d。 – thirsty93

+0

我真的只是想找一種方法在directx中使用乾淨的高質量可縮放字體。它們可能相當密集cpu,因爲我不會渲染任何其他東西。但我需要能夠用文本填充屏幕。 – thirsty93

回答

1

直接矢量字體在D3D中無法正常工作,因爲它需要一箇中間紋理來保存柵格化數據(垂直或像素)並需要做更多的額外工作,因此您需要一種方法讓它們有點不同讓他們輕鬆高效地工作(如果您的表現受到限制/關心表現)。你應該使用帶符號的距離字段來表示它(它們可以很好地擴展,但是如果你的字體很複雜,可能會縮小比例,硬邊也不能很好地存儲,但是這可以通過使用兩個通道來存儲數據,距離場也允許簡單的平滑,粗體,輪廓,發光和陰影),阿爾拉閥門的改進的阿爾法測試先進的矢量紋理渲染(如果你真的想這樣做的話,這意味着矢量字體的紙張)。它非常依賴着色器(儘管它可以通過alpha測試在FFP中完成,但在像素着色器中使用smoothstep提供了更好的結果,且開銷最小),但除了ps v1之外,其他任何東西都不需要任何東西。請參閱文件http://www.valvesoftware.com/publications.html,參見閥源sdk中的着色器以獲取完整的實現參考。 (我原意使用這個構建了一個基於Dx11的文本渲染器,奇妙地工作,雖然我使用了一個工具來強制我的sdf,所以我不需要在運行時創建它們)。

+0

+1爲距離字體的鏈接(認真的人,_使用這個stuff_),但-1在說D3D不能使用矢量字體。矢量字體意味着使用三角形繪製字體,而不是柵格化它們。你必須做的是爲每個字形生成一個網格,而不是修改字形。這不是一個簡單的過程,但它確實可行。 –

+0

@nicol:似乎你抓到我時,我還在修理它並充實它。更新爲在D3D中使用矢量字體更清楚一點。 – Necrolis