使用Opengl绘制字体
通过使用windos自带的字体,可以在opengl中方便的绘制多种字体。
bitmapFont类
下面介绍 bitmapFont 字体类及其成员函数:
首先是构造函数。
第一个构造函数:与winapi函数CreateFont(...)函数参数基本相同。
bitmapFont(
HDC &hdc, //
char *fontname, // 字体名称
int nHeight, // 字体逻辑高度
int nWidth, // 字体宽度
int nEscapement, // 旋转角度
int nOrientation, // 基线方向角度
int fnWeight, // 磅
bool fdwItalic = false, // 是否斜体
bool fdwUnderline = false, // 是否下划线
bool fdwStrikeOut = false, // 是否删除线
// 输出精度
DWORD fdwOutputPrecision = OUT_TT_PRECIS,
// 剪切精度
DWORD fdwClipPrecision = CLIP_DEFAULT_PRECIS,
// 质量
DWORD fdwQuality = ANTIALIASED_QUALITY,
//
DWORD fdwPitchAndFamily = FF_DONTCARE | DEFAULT_PITCH
);
第二个构造函数:用于重新加载新的字体
bool reload(
HDC &hdc,
char *fontname, // 字体名称
int nHeight, // 字体逻辑高度
int nWidth, // 字体宽度
int nEscapement, // 旋转角度
int nOrientation, // 基线方向角度
int fnWeight, // 磅
bool fdwItalic = false, // 是否斜体
bool fdwUnderline = false, // 是否下划线
bool fdwStrikeOut = false, // 是否删除线
// 输出精度
DWORD fdwOutputPrecision = OUT_TT_PRECIS,
// 剪切精度
DWORD fdwClipPrecision = CLIP_DEFAULT_PRECIS,
// 质量
DWORD fdwQuality = ANTIALIASED_QUALITY,
//
DWORD fdwPitchAndFamily = FF_DONTCARE | DEFAULT_PITCH
);
接下来是属性设置函数函数:
bool setItalic(); // 设置斜体
bool resetItalic(); // 清除斜体
bool setUnderline(); // 设置下划线
bool resetUnderline(); // 清除下划线
bool setStrikeOut(); // 设置删除线
bool resetStrikeOut(); // 清除删除线
bool setcol(GLclampf r, GLclampf g, GLclampf b, GLclampf a); // 设置字体颜色
然后是状态检测函数:如果函数返回true,字体类构造成功,可用;反之这个字体类不可用。
bool initSuccess();
最后是绘制字符串儿函数:在坐标(x,y,z)的位置绘制字符串 str
void drawScence(float x, float y, float z,char *str);
例子
- if( pfont->initSuccess() )
- {
- for(int i=0;i < 10;++i)
- {
- pfont->setcol( (rand()%100/100.0f), (rand()%100/100.0f), (rand()%100/100.0f), 1.0f );
- pfont->drawScence(0.0f, 1.0f, -i*0.8f, "hello opengl!");
- }
- }
使用代码以上代码可以绘制出这样的效果: