我使用wglUseFontBitmaps在OpenGL中繪製的字體對每個字母都採用相等的空格(寬度),所以「。」例如需要與「M」一樣多的空間。我已將字體創建中的音高參數更改爲VARIABLE_PITCH
,但它不會改變任何內容。實際上可以用wglUseFontBitmaps來完成,還是每個生成的位圖都需要相等的空間?OpenGL和wglUseFontBitmaps只繪製等距字母
Furthermor我正在用GetTextExtentPoint32W()查詢光柵位圖文本的寬度/高度。返回的寬度是可以的,但高度總是太大。我在黑色文本後面繪製了一個明亮的矩形,以使其在3D場景中始終可讀。爲什麼被查詢的身高如此之大?是否爲更高的字符保留空間,如「É」?
我的設置:
HFONT font; // Windows Font ID
font = CreateFont( -12, // Height Of Font
0, // Width Of Font
0, // Angle Of Escapement
0, // Orientation Angle
FW_EXTRALIGHT, // Font Weight
FALSE, // Italic
FALSE, // Underline
FALSE, // Strikeout
ANSI_CHARSET, // Character Set Identifier
OUT_TT_PRECIS, // Output Precision
CLIP_DEFAULT_PRECIS, // Clipping Precision
ANTIALIASED_QUALITY, // Output Quality
FF_DONTCARE | VARIABLE_PITCH, // Family And Pitch
(LPCWSTR)L"Arial"); // Font Name
SelectObject(this->hDeviceContext, font);
//init display lists for text drawing
bool createFontLists = wglUseFontBitmaps(this->hDeviceContext, 0, 255, 1000);
這不是一個答案,而是一個建議:不要使用它。如果您想使用OpenGL繪製字體,請使用FreeType。這是一個好得多的圖書館。有幾個將freetype和opengl包裝在一起的開源庫。我相信FTGL是最成熟的。祝你好運。 – aeskreis
Thx。我看了一下FTGL,但希望沒有它,但我認爲現在使用這樣的庫可能是更好的解決方案。 – Michbeckable