繁体   English   中英

用c ++制作一个3d文本编辑器

[英]Making a 3d text editor in c++

目前我正在为linux系统编写一个文本编辑器,它可以执行一些涉及opengl渲染的特定文本/字体突出显示。 有没有人有一个c ++图形渲染库的建议,适用于linux(特别是现在的ubuntu)?

并建议从哪里开始渲染3D文本非常感谢!

编辑:只是为了澄清渲染3d文本是项目的严格要求。

在OpenGL级别基本上只有三种方法:

光栅字体。

使用glBitmap或glDrawPixels在屏幕上绘制一组矩形像素。 这样做的缺点很多:描述每个字符的数据每帧都从CPU发送到图形卡 - 以及帧中的每个字符。 这可能相当于显着的带宽。
底层的OpenGL实现几乎肯定必须以某种方式在CPU和帧缓冲区之间“混合”图像数据。
许多3D图形芯片根本不是为了绘制位图而设计的。 在这种情况下,OpenGL软件驱动程序必须等到3D硬件完全完成绘制,然后才能将像素直接溅入帧缓冲区。 在软件完成之前,硬件处于空闲状态。
位图和Drawpixels必须平行于屏幕边缘对齐,因此无法旋转文本。
缩放位图和Drawpixels是不可能的。
Raster字体有一个显着的优点 - 那就是在纯软件OpenGL实现上,它们可能比其他方法更快......与3D硬件情况相反。

几何字体。 使用几何图元(线条,三角形等)绘制字体的字符。 这样做的缺点是:
绘制一些字符所需的三角形数量可能非常大 - 特别是如果您希望它们看起来很好。 这可能对性能不利。
设计字体既困难又昂贵。
使用彩色边框,阴影等进行字体处理会显着加剧其他两个问题。

优点是:几何字体可以缩放,旋转,扭曲,变形,挤压。
您可以使用精美的灯光模型,环境贴图,纹理等。
如果在3D世界中使用,您可以使用它们执行碰撞检测。
几何字体很好地缩放。 它们没有表现出错误的锯齿伪影,并且它们在扩大时不会变得“模糊”。

纹理映射字体。 通常,整个字体存储在一个或两个大纹理贴图中,每个字母绘制为单个四边形。 缺点是:
您需要的纹理贴图的大小可能必须非常大 - 特别是如果您需要大写和小写 - 和/或如果您想使字体在大点大小时看起来很好。 这对于仅支持有限纹理贴图大小的硬件尤其是一个问题(例如3Dfx Voodoo只能渲染高达256x256的地图)
如果使用MIPmapping,则缩放字体会使其看起来模糊不清。 如果你不使用MIPmapping,它看起来会很可怕。

优点是:
一般性 - 您可以为字体的每个字母使用任意全彩色图像。 纹理字体可以旋转和缩放 - 尽管它们看起来总是“平坦”。
将其他类型的字体转换为纹理贴图很容易。
您可以在3D场景中绘制它们,它们将被正确照亮。
速度! 纹理字体只需要将一个四边形发送到每个字母的硬件。 这可能比Raster或Geometric字体快一个数量级。 由于低端3D硬件已经过高度优化以绘制简单的纹理多边形,因此速度也得到提升,因为您通过渲染器“处于快速路径”。 (CAVEAT:在仅限软件的OpenGL上,纹理字体将是SLOW。

一些免费字体库的链接:

我使用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);

我建议你QT是GNDE的KDE或GTk +的基础。 他们都支持OPENGL和文本。 使用QT,您可以执行高级图形(QGraphicsView),包括动画......看看QT演示应用程序。

一个好的开始是NeHe的OpenGL第14课。

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM