用GLUT绘制大文本?

时间:2015-04-25 23:58:24

标签: c++ opengl text glut

我为学校创造了一个井字游戏,我基本上已经完成了。我唯一留下的是,当有人获胜时,我想在屏幕上弹出一个方框,并用大文字说“X Wins”或“O Wins”,具体取决于是谁。

我发现在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);
}

2 个答案:

答案 0 :(得分:3)

简短回答:

您正在绘制无法调整大小的位图字符,因为它们以像素为单位给出。尝试使用具有以下功能之一的笔划字符或字符串: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!");

希望有所帮助!

答案 1 :(得分:1)

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