【问题标题】:opengl print text variables on screen - menuopengl 在屏幕上打印文本变量 - 菜单
【发布时间】:2012-03-06 22:18:14
【问题描述】:

我正在制作一个赛车游戏,我想在我的场景屏幕上打印一些信息,例如速度、圈数、键绑定等。我希望它们平放在屏幕上,可以说是固定在相机前面的位置(就像真实游戏中的速度计)而不是在我的场景中 - 如果这不可能,那么我会在我的场景中打印它们。

你知道我可以使用哪些函数(glutBitmapCharacter?)我尝试了 printw,但我的程序无法编译。你有什么建议?

各种例程会打印出多条消息

我已经尝试过了(屏幕上没有显示)

glPushMatrix();
                 glRasterPos2f(100, 100);
                 glColor3f(0.0,0.5,0.1);
                sprintf(message,"\nLap(User):%d",lapsB);
                len = (int) strlen(message);
                for (int i = 0; i < len; i++) {
                    glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, message[i]);
                }
                glPopMatrix();

我如何创建菜单的另一件事 - 有什么方法可以使用,用户必须在 3 个条目之间进行选择,仅通过按键盘上的 1 或 2 或 3 输入

【问题讨论】:

  • 在 openGL 中渲染文本是一件复杂的事情,有多种解决方案。这个网站之前已经问过很多次了。请参阅此问题以获取详细答案:stackoverflow.com/questions/5262951/… 还取决于您的 openGL 版本,因此很高兴告诉我们您使用的 openGL 版本以及您的目标操作系统
  • 这是windows 7下的4.2版本,希腊同胞!
  • 发现了一些关于菜单的东西:glutCreateMenu(MenuSelect); glutAddMenuEntry("红色",RED); // 将菜单附加到右键 glutAttachMenu(GLUT_RIGHT_BUTTON);我就用我没有时间的鼠标
  • 这也没有字:glutStrokeCharacter(GLUT_STROKE_ROMAN,str[i]);
  • 您使用的是核心上下文还是兼容性上下文?

标签: c++ windows opengl text printing


【解决方案1】:

我感觉你为 glRasterPos2f(100, 100); 传递了太大的值 这是一篇很好的帖子,您可以在其中了解如何使用 GLUT printing text with glut 显示文本。

【讨论】:

  • 我降低了值,按照示例仍然不起作用。我在我的空闲函数中发布了这条消息,这样它就会一直闪烁。我的场景分辨率是 720p
【解决方案2】:

您的屏幕上没有显示任何内容,因为 glutBitmapCharacter 期待您发送的字符的 ASCII 码。您正在发送数字字符的 int 值

相反,您需要发送 char 缓冲区中每个字符的 ascii 值message

例如,如果您想显示“1”,请发送 1 + 48,因为 48 是 0 的 ascii 代码 glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, 1+48)

【讨论】:

    【解决方案3】:

    您确定您在 Windows 下成功创建了 OpenGL 4.2 核心上下文吗? (需要一些明确的工作来实现它) 仅拥有支持 openGL 4 的卡并不意味着您正在使用 openGL 4 核心上下文。

    除此之外,如果您正在使用 openGL 4.2 核心上下文,那么 glutBitmap() 将无法工作,因为它与 glRasterPos() 一起已被弃用

    请参阅我在原始帖子的 cmets 中给出的相同答案,其中 I link 已经给出了关于如何呈现 openGL 文本的非常好的答案。

    【讨论】:

    • 我刚刚输入了这个:cout
    • 是的,正确。我将编辑答案以反映兼容性和核心上下文之间的区别
    • @NicolBolas 为了完整起见,我不得不说,在我的回答中,我只是想确定 OP 的问题是什么,我发布了 glutBitmap 不起作用的可能原因,因为他说他正在使用 openGL 4.2.直到后来在 cmets 中,他才明白他不知道上下文是什么,这意味着他正在处理的是一个兼容性上下文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多