OpenGL本身没有包含任何的文本处理能力,需要自己定义一套全新的系统让OpenGL绘制文本到屏幕上,但是文本字符没有图元。
可以通过GL_LINES来绘制自行,创建文本的3D网格,或者是将3D环境中字符纹理渲染到2D四边形上。
常用的方法是:将字符纹理绘制到四边形上。
经典文本渲染:位图字体
早期,渲染文本是通过选择一个需要的字体,并提取这个字体中所有相关的字符,将其放到一个单独的大纹理中来实现。————位图字体
在纹理的预定义区域中包含了想要使用的所有字符。字体的这些字符被称为字形,每个字形都关联着一个特定的纹理坐标区域。
想渲染一个字符的时候,只需要通过渲染这一块特定的位图字体区域到2D四边形即可。
使用方法是:
取一张位图字体,通过选择纹理坐标,从纹理中采样对应的字形,渲染到多个2D四边形上。
补充:位图字体通过Codehead的位图生成器生成的。
优点:容易实现,位图字体已经预光栅化了,效率很高。
缺点:不够灵活,当使用不同的字体时,需要重新编译一套全新的位图字体,而且程序被限制在一个固定的分辨率。文本进行放大可以看到像素边缘。
通常会局限于非常小的字符集,如果想让其支持Extended或Unicode字符就不现实。
下面可以看下现代文本渲染:FreeType库,加载TrueType字体的方式
TrueType是一个能用于加载字体,将其渲染到位图以及提供多种字体相关的操作的软件开发库。是跨平台字体库。
吸引点是:能够加载TrueType字体。
TrueType字体不是用像素或不可缩放的方式来定义的,是通过数学公式,也就是曲线的组合来定义的。<