使用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!");
}
}
使用代碼以上代碼可以繪製出這樣的效果: