2011-05-03 72 views
0

我希望使用freetype庫在我的openGL ES應用程序中加載unicode字體。我最初考慮使用Arial Unicode MS,但它太大了,大約24 MB。在OpenGL ES應用程序中加載unicode字體

是否有其他的unicode字體可用更小的尺寸?我也明白,其他一些unicode字體可能不足以解決我的問題。有沒有其他方法可以解決我的問題?

+0

不是直接回答,因此留下評論。以前我所做的是爲此使用位圖字體。這使我只能包含遊戲內文本所需的特定Unicode字符。如果您有動態文本(即名稱條目),這可能不合適。 – InsertWittyName 2011-05-03 19:29:15

回答

1

我認爲你指的是紋理映射字體。正如你已經知道的那樣,一個完整的Unicode字體消耗了相當多的空間。但是,改變字體並不會產生任何影響,因爲內存需求不依賴於字體,而是字形渲染到紋理圖集的分辨率乘以包含在集合中的字形數量。

儘管紋理映射字體對於只包含有限字形(拉丁語,西里爾語,希臘語,韓語,阿拉伯語)字母的可行選項,但如果要支持完整的國際化,它會變得相當笨拙。

有兩個相當大的選擇:

  1. 掃描文本,顯示了所需的所有字形,只渲染和上傳者;對於漢字和類似的大型腳本來說,這種情況不會那麼好。

  2. 使用FreeType和一些佈局庫(Pango或類似的)渲染整個文本到緩衝區。

我推薦使用灰度抗鋸齒的3倍屏幕分辨率進行渲染。然後使用像素對齊的濾鏡遮罩紋理進行調製,或使用片段着色器實現子像素抗鋸齒。

有可能的第三種方法,但我到目前爲止從未實現它:矢量紋理。本質上,您在片段着色器中實施抗鋸齒樣條曲線掃描程序,並通過採樣器提供樣條曲線參數;這允許使用GPU加速渲染清晰的文本。

+0

感謝datenwolf的詳細解釋。我讚賞這些建議。它是一個非常有趣的問題,我希望有一個有趣的解決方案。 – 2011-05-06 17:50:47