光栅字体很糟糕,这在现代 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 pt。Helvetica 可能是 22 或 24 像素高。pt之间的区别。size 和 pixel size 应该用于 DPI 缩放,但 GLUT 实际上并没有实现这一点。