Мне нужно сосредоточить кусок текста на прямоугольник.
Я нашел этот пример, но я изо всех сил пытаюсь понять, что он делает.
Это не так сложно достичь, мне просто нужно знать, как найти ширину и высоту текста после рисования, но я не могу найти его нигде.
Чтобы нарисовать текст, я делаю его char char:
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.
Растровые шрифты ужасны, это не будет работать в современном 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 пиксела высотой. Различие между pt. размер и размер пикселя предполагается для масштабирования DPI, но GLUT фактически не реализует этого.
glutBitmapHeight
узнать также высоту, посколькуglutBitmapHeight
кажется, не существует?