2011-04-04 94 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演示应用程序。