2013-10-06 3 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이 작동하지만 래스터 pos와 같은 것들은 OpenGL ES 및 코어 OpenGL 3+에서 지원되지 않습니다.

이처럼, 당신의 문자열의 모든 문자에 걸쳐 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 픽셀입니다. 태평양 표준시 사이의 구별. 크기와 픽셀 크기는 DPI 스케일링을위한 것으로 가정되지만 GLUT는 실제로 이것을 구현하지 않습니다.

+0

답변 해 주셔서 감사합니다. 문제가 해결 될 수도 있습니다. 'glutBitmapHeight'가 존재하지 않는 것 같기 때문에 높이를 알고 계신가요? –

+0

@HenriqueBarcelos : 예, 답안에 그것을 포함하는 것을 잊었습니다. 내 업데이트 된 답변보기 :) –

+0

고마워요, 여기에서 테스트 할게요 ... –

관련 문제