使用OpenGL将位图文本居中到矩形

时间:2013-10-06 20:18:27

标签: c++ opengl

我需要将一段文字居中放置一个矩形。

我发现了example,但我很难理解它的作用。

实现这一点并不难,我只需要知道如何在绘制后找到文本的宽度和高度,但我无法在任何地方找到它。

要绘制文本,我通过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的程序。

1 个答案:

答案 0 :(得分:1)

光栅字体很糟糕,这在现代OpenGL中不起作用,所以你知道 - 你现在需要使用纹理映射三角形来实现位图字体。如果你刚刚开始,传统的OpenGL可能适合你,但你会发现OpenGL ES和核心OpenGL 3 +不支持像raster 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实际上并没有实现这一点。