2013-10-06 55 views
0

我需要將一段文本居中放到矩形中。使用OpenGL將位圖文本居中放到矩形中

我發現這個example,但我很努力去理解它的功能。

實現這一點並不難,我只需要知道如何在繪製後找到文本的寬度和高度,但我無法在任何地方找到它。

繪製文本,我做的成炭炭:

static void drawText(std::string str, float x, float y, float z) { 
    glRasterPos3f(x, y, z); 
    for (unsigned int i = 0; i < str.size(); i++) { 
     glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, str[i]); 
    } 
} 

不知道這是最好的方式,但它是使用OpenGL我的第一個程序。

回答

1

柵格字體太糟糕了,這在現代OpenGL中不起作用,因此您應該知道 - 您需要使用紋理映射三角形來實現位圖字體。如果你剛剛開始,傳統的OpenGL可能適合你,但是你會發現OpenGL ES和核心OpenGL 3+不支持像光柵pos這樣的東西。

這就是說,你可以歸納出所有的字符glutBitmapWidth (...)在你的字符串,像這樣:

 unsigned int str_pel_width = 0; 
const unsigned int str_len  = str.size(); 

// Finding the string length can be expensive depending on implementation (e.g. in 
// a C-string it requires looping through the entire string storage until the 
//  first null byte is found, each and every time you call this). 
// 
// The string has a constant-length, so move this out of the loop for better 
// performance! You are using std::string, so this is not as big an issue, but 
//  you did ask for the "best way" of doing something. 

for (unsigned int i = 0; i < str_len; i++) 
    str_pel_width += glutBitmapWidth (GLUT_BITMAP_HELVETICA_18, str [i]); 

現在,完成了這次討論中,你應該知道,每一個字符的高度一致在GLUT位圖字體中。如果我記得,18點。 Helvetica可能是22或24像素高。 pt之間的區別。大小和像素大小應該用於DPI縮放,但GLUT實際上並未實現這一點。

+0

感謝您的回答,這可能會解決我的問題。無論如何也知道高度,因爲'glutBitmapHeight'似乎不存在? –

+0

@亨利克·巴塞洛斯:是的,我忘了在我的回答中加入這個。看到我更新的答案:) –

+0

謝謝,我會在這裏測試... –