使用Opengl繪製字體

使用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!");
		}
	}

使用代碼以上代碼可以繪製出這樣的效果:



發佈了31 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章