2013-04-28 101 views
5

我開始在這家使用2D OpenGL實現來顯示我們系統的數據(在Windows上運行)的公司工作。整個系統是用C++(使用C++ Builder 2007)構建的。事情是,他們所打印的文本那裏,當你放大,我認爲是因爲文字是一個位圖是象素化:OpenGL上的基於矢量的字體

Example of the view

據我所知,他們使用相同的字體文件,Windows不會。我在這裏問了爲什麼發生這種情況,我得到的答案是,實現它的人(不再在公司工作)說OpenGL上的字體很難,這是他可以做的最好的或者類似的東西。

我的問題是:是否有任何簡單而有效的方法來使文本也是一個向量(與圖片中的那些行相同的方式?)所以當我縮放相機,發生了很多,他們不pixelize。我對OpenGL知之甚少,如果您有一些與此相關的指南和/或教程來指引我走向正確的方向,我會非常感激。基本上任何材料都會很棒。

+1

他與OpenGL的主要問題可能是跨平臺的字體處理非常不穩定,無論如何對它們的支持是最小的 - 但可能有第三方庫專門用於此(SDL和GLEW提供支持,IIRC) – Polar 2013-04-28 14:05:54

+0

I'我會尋找那些圖書館,謝謝! – dccarmo 2013-04-28 14:15:32

+0

@AkiSuihkonen如果你找到他們,請分享!謝謝! – dccarmo 2013-04-28 14:21:29

回答

10

大多數的OpenGL文本渲染庫都是這樣的:爲字體創建位圖,這意味着除非你做一些黑客,否則你將會遇到縮放和別名問題。其中一個流行的黑客是Valve的approach。你使用簽名距離場算法生成您的字體位圖,然後可以幫助您在渲染過程中按比例平滑文本輪廓。 Here您可以找到Distance字段生成的C++實現。

如果你堅持廠商特定的硬件,那就是NVidia,你可以試試NVidia Path擴展,它允許直接在GPU上渲染圖形。請記住,這只是NVidia的事情。但一般而言,基於符號距離場的方法是最流暢和最容易實現的。

Btw,freetype-gl使用閥門的方法,也使用現代化的管道。

+0

謝謝你的解釋,邁克爾。現在我更清楚了。我一定會檢查所有的鏈接,儘管NVidia解決方案對我們的項目來說太具體了,但我會讀一下它,只是爲了獲得一些觀點。 – dccarmo 2013-04-28 19:25:05

+0

還有矢量紋理貼圖方法http://alice.loria.fr/index.php/[email protected] – datenwolf 2013-04-29 10:30:33

-1

在OpenGL中使用字體的問題是它們在各個平臺上處理不一致,並且它們的支持最小。如果你願意去OpenGL的幫助庫(想起SDL),那麼這種行爲可能會被打包,這意味着你只需要提供一個合適的字體文件供他們使用。

+3

GLEW無事可做與字體。 – 2013-04-28 14:36:35

+0

@NicolBolas不確定它是否支持字體,只是將它用作輔助函數庫的一個示例。 – Polar 2013-04-28 14:53:17

+1

然後將其從您的答案中刪除,因爲它不回答問題(這是關於字體呈現)。 – 2013-04-28 15:24:28

4

您可以嘗試freetype-gl其OpenGL中的字體渲染庫。

+0

我會明天再試,然後回報,但正如其他人提到的,這個庫似乎是解決方案。謝謝! – dccarmo 2013-04-28 19:26:29