2011-04-04 46 views
5

目前我正在尋找一個針對linux系統的文本編輯器,它可以執行一些涉及opengl渲染的特定文本/字體突出顯示。有沒有人有一個C + +圖形渲染庫的建議,與Linux(特別是現在的Ubuntu)很好地工作?在C++中編寫一個三維文本編輯器

有關如何從渲染3d文本開始的建議非常感謝!

編輯:只是爲了澄清渲染3D文本是項目的嚴格要求。

+1

您已發佈賞金;所以你似乎還不滿意你收到的答案。你能否添加關於你要找的東西的細節? – JCooper 2011-04-11 15:02:02

+0

我想做的是一個文本編輯器,它使用一些3d對象的語法高亮顯示。我不只是在opengl中尋找字體渲染,儘管這將是一個開始。其中一些答案來自Windows的角度,這不是我所瞄準的平臺。本質上我想找到一個庫,可以在各種不同的表面上渲染三維文字,但如果沒有一個,我希望得到一些建議,從建設這樣的圖書館開始。 – shuttle87 2011-04-13 08:21:16

+0

你是什麼意思「在各種不同的表面」?你想在圓柱體或球體周圍渲染文字嗎? – JCooper 2011-04-13 16:09:53

回答

4

我用FTGL,它建立在的FreeType的頂部。要創建3D,擠出的文字,我做這些調用:

#include <FTGL/ftgl.h> 
#include <FTGL/FTFont.h> 
... 
FTFont* font = new FTExtrudeFont("path_to_Fonts/COOPBL.ttf"); 
font->Depth(.5); // Text is half as 'deep' as it is tall 
font->FaceSize(1); // GL unit sized text 
... 
FTBBox bounds = font->BBox("Text"); 
glEnable(GL_NORMALIZE); // Because we're scaling 
glPushMatrix(); 
glScaled(.02,.02,.02); 
glTranslated(-(bounds.Upper().X() - bounds.Lower().X())/2.0,yy,zz); // Center the text 
font->Render("Text"); 
glPopMatrix(); 
glDisable(GL_NORMALIZE); 
9

有基本上只有三種方式在OpenGL的級別要做到這一點:

點陣字體。

使用glBitmap或glDrawPixels在屏幕上繪製矩形的一串像素。這樣做的缺點有很多: 描述每個字符的數據每幀都會從CPU發送到顯卡 - 以及幀中的每個字符。這可以佔據相當大的帶寬。
底層的OpenGL實現幾乎肯定會以某種方式在CPU和幀緩衝區之間「調整」圖像數據。
許多3D圖形芯片並非設計用於繪製位圖。在這種情況下,OpenGL軟件驅動程序必須等到3D硬件完成繪圖後才能將像素直接放入幀緩衝區。在軟件完成之前,硬件處於空閒狀態。
位圖和繪圖像必須平行於屏幕邊緣對齊,因此不能旋轉文本。
縮放位圖和繪圖是不可能的。
Raster字體有一個顯着的優點 - 那就是在純軟件OpenGL實現方面,它們可能比其他方法更快......與3D硬件情況相反。

幾何字體。 使用幾何圖元 - 線條,三角形等來繪製字體的字符。這樣做的缺點是:
繪製某些字符所需的三角形數量可能非常大 - 尤其是如果您希望它們看起來不錯。這可能會對性能造成影響。
設計字體既困難又昂貴。
使用彩色邊框,陰影等字體顯着加劇了其他兩個問題。

優點是: 幾何字體可以縮放,旋轉,扭曲,變形,擠壓。
您可以使用花哨的照明模型,環境貼圖,紋理等。
如果在3D世界中使用,您可以使用它們執行碰撞檢測。
幾何字體很好地縮放。它們不會展現出不良的混疊僞像,並且在放大時不會「模糊」。

紋理貼圖字體。 通常,整個字體存儲在一個或兩個大紋理貼圖中,每個字母都繪製爲單個四邊形。缺點是:
您需要的紋理貼圖的大小可能必須非常大 - 尤其是如果您需要大寫和小寫 - 並且/或者如果要在大點尺寸下使字體看起來更好。這對於僅支持有限紋理貼圖尺寸的硬件尤其是問題(例如,3Dfx Voodoo's只能渲染最多256x256的地圖)
如果使用MIPmapping,則縮放字體會使其顯得模糊不清。如果你不使用MIPmapping,它會看起來非常可怕。

優點是:
一般性 - 您可以爲字體的每個字母使用一個任意的全綵色圖像。 紋理字體可以旋轉和縮放 - 雖然它們總是看起來'平坦'。
很容易將其他種類的字體轉換爲紋理貼圖。
您可以在3D場景中繪製它們,並且它們將被正確照亮。
速度!紋理字體只需要將一個四邊形發送到每個字母的硬件。這可能比Raster或幾何字體快一個數量級。由於低端3D硬件高度優化以繪製簡單的紋理多邊形,因此通過渲染器可以「快速路徑」,從而提高速度。 (警告:在純軟件OpenGL的,質感的字體將是緩慢的

鏈接到一些免費字體庫:

+2

你在總結Shuttle87將遇到的陷阱方面做得很好。我有種感覺,他們不理解他們要求的頭痛。 – drewish 2011-04-16 17:09:47

1

我推薦你QT是GNOME的KDE或GTK +的基礎。他們都支持OPENGL和文本。使用QT,您可以執行高級圖形(QGraphicsView),包括動畫......查看QT演示應用程序。