Центрирование растрового текста в прямоугольнике с помощью OpenGL

0

Мне нужно сосредоточить кусок текста на прямоугольник.

Я нашел этот пример, но я изо всех сил пытаюсь понять, что он делает.

Это не так сложно достичь, мне просто нужно знать, как найти ширину и высоту текста после рисования, но я не могу найти его нигде.

Чтобы нарисовать текст, я делаю его 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

1 ответ

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 пиксела высотой. Различие между pt. размер и размер пикселя предполагается для масштабирования DPI, но GLUT фактически не реализует этого.

  • 0
    Спасибо за ответ, это может решить мою проблему. Есть ли glutBitmapHeight узнать также высоту, поскольку glutBitmapHeight кажется, не существует?
  • 0
    @HenriqueBarcelos: Да, я забыл включить это в свой ответ. Смотрите мой обновленный ответ :)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню