【问题标题】:Drawing large text with GLUT?用 GLUT 绘制大文本?
【发布时间】:2015-04-25 23:58:24
【问题描述】:

我为学校创建了一个井字游戏,我基本上完成了。我唯一剩下的就是当有人获胜时,我希望屏幕上弹出一个框,并根据谁用大文本说“X 获胜”或“O 获胜”。

我发现在 openGL 中绘制文本非常复杂。因为这对作业来说并不重要,所以我不是在寻找复杂的东西,也不需要它看起来超级漂亮。另外,我很可能只想更改我的代码。另外,当我重新调整窗口大小时,我希望文本的大小是可变的。

这是我的文字绘制功能目前的样子。它把它画得很小。

注意:mText 是一个 int [2] 数据成员,用于保存我要绘制文本的位置

void FullGame::DrawText(const char *string) const
{
    glColor3d(1, 1, 1);

    void *font = GLUT_BITMAP_TIMES_ROMAN_24;

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_BLEND);

    int len, i;
    glRasterPos2d(mText[0], mText[1]);
    len = (int)strlen(string);
    for (i = 0; i < len; i++)
    {
        glutBitmapCharacter(font, string[i]);
    }

    glDisable(GL_BLEND);
}

【问题讨论】:

  • 在该示例中,答案使用#include &lt;GL/glew.h&gt;#include &lt;GL/freeglut.h&gt;,我只使用#include "glut.h",正如我的问题所说,我不想使事情复杂化并包含一个全新的库完成我的任务。

标签: c++ opengl text glut


【解决方案1】:

简答:

您正在绘制无法调整大小的位图字符,因为它们以像素为单位。尝试使用具有以下功能之一的笔划字符或字符串:glutStrokeCharacterglutStrokeString。笔划字体可以使用glscalef调整大小。

长答案:

实际上,您可以使用而不是逐个字符地打印文本:

glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, "Text to appear!");

这里的字体大小为pixel,因此在直接使用时无法进行缩放。

请注意,FreeGLUT 中引入了glutBitmapString,它是 OpenGL 实用工具包 (GLUT) 库的开源替代方案。更多字体渲染细节:http://freeglut.sourceforge.net/docs/api.php#FontRendering

我强烈建议使用 FreeGlut 而不是原来的 Glut。

1 - Glut 的最后一个版本是在 2000 年之前,因此它缺少一些功能:http://www.lighthouse3d.com/cg-topics/glut-and-freeglut/

2 - 两种最常见的 GLUT 替代品是 OpenGLUT 和 freeGLUT,它们都是开源项目。

如果您决定使用 FreeGlut,您应该拥有以下内容:

#include < GL/freeglut.h>

话虽如此,您只需要缩放文本,因此您可以使用glutStrokeString,它比位图字符串更灵活,例如,它可以在视觉上调整大小。你可以试试:

glScalef(0.005,0.005,1);
glutStrokeString(GLUT_STROKE_ROMAN, (unsigned char*)"The game over!");

希望有帮助!

【讨论】:

  • 这不是在做我的代码已经做的事情吗?我想要大字体,Time New Roman 24 不是很大。
  • 我可能执行错了,但是当我调用glScalef 时,它会调整所有内容的大小。然后我用第一个数字的倒数调用glScalef,将所有内容调整为正常大小。这有助于将大小调整为正常,但也包括调整文本大小。
  • 另外,它根本不调整文本大小,只是调整其他所有内容。问题可能是我仍在使用我当前的绘图代码。但是当我使用你的时,我得到了错误IntelliSense: identifier "glutBitmapString" is undefined
  • @byurocks23:请注意 glutBitmapString 是在 FreeGLUT 中引入的,它是 OpenGL 实用工具包 (GLUT) 库的开源替代品。更多字体渲染细节:freeglut.sourceforge.net/docs/api.php#FontRendering
  • @byurocks23:请尝试使用 glutStrokeString 而不是 glutBitmapString。
【解决方案2】:

最简单的方法是为每个“Win”屏幕生成纹理并在四边形上渲染它。听起来您不关心打印任意字符串,只关心 2 条可能的消息。您可以在 Paint 或其他中绘制纹理,如果您不担心质量,纹理甚至不必那么大。易于实施且完全可调整大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多