OpenGL中显示中文的解决方案多种多样,很多文章已经对这个问题进行了深入的研究。总结起来,中文在OpenGL渲染环境中的显示主要采用两种方法:
1、预先将一个或多个表示中文文字的二值位图绑定为纹理,然后在指定位置绘制;
2、将中文绘制为二值位图,采用glbitmap方法,实时地绘制。
方法1需要预先绑定纹理,或是将要显示的字体一个一个绑定,在绘制时拼成一段文字,或是将一段文字绑定为一个纹理绘制。方法1比较简单,但相对而言不是非常灵活,例如,当程序运行时要在屏幕上输出某个没有绑定为纹理的文字时,就无法显示。方法2可以实时地改变需要绘制的文字,因为没有预先绑定纹理,这种方法可以在程序运行时随意改变显示的文字内容。事实上,方法2也更多地被采用。两种方法相同之处是,均采用绘制二值位图方式在OpenGL下绘制,显示的字体比较难以表现出更多样式,如描边的效果。Freetype2中给出了描边中文字体的解决方案,但其实现途径似乎比较复杂。
GDI+为中文字体的绘制提供了很好的解决方案,使用比较简单,能够很容易地和OpenGL结合起来绘制中文字体的各种效果。这里以一个单文档的MFC程序为例,把这种解决方案各个步骤归纳一下。
一、GDI+绘制描边字体
(1)使用GDI+,在视图类头文件中加入如下代码,启用GDI+。
#include <GdiPlus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
并声明变量
Gdiplus::GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_gdiplusToken;
(2)在程序初始化时,启动GDI+。例如,在视图类的构造函数中加入:
Gdiplus::GdiplusStartup(&m_gdiplusT