如何在 C++ 中使用 glutBitmapString() 将文本绘制到屏幕上?
Posted
技术标签:
【中文标题】如何在 C++ 中使用 glutBitmapString() 将文本绘制到屏幕上?【英文标题】:How do I use glutBitmapString() in C++ to draw text to the screen? 【发布时间】:2009-02-12 23:45:00 【问题描述】:我正在尝试使用 GLUT 在 2d 中将文本绘制到屏幕上。
我想使用 glutBitmapString(),有人可以给我看一个简单的例子,说明在 C++ 中设置和正确使用此方法所需要做的事情,以便我可以在 (X,Y) 位置绘制任意字符串?
glutBitmapString(void *font, const unsigned char *string);
我正在使用 linux,并且我知道我需要创建一个 Font 对象,尽管我不确定如何以及我可以将字符串作为第二个参数提供给它。但是,如何同时指定 x/y 位置?
一个简单的例子对我有很大帮助。如果你能告诉我从创建字体到调用最好的方法。
【问题讨论】:
【参考方案1】:在调用glutBitmapString()
之前,您必须使用glRasterPos
设置光栅位置。请注意,每次调用glutBitmapString()
都会推进光栅位置,因此多次连续调用将一个接一个地打印出字符串。您还可以使用glColor()
设置文本颜色。列出了可用字体集here。
// Draw blue text at screen coordinates (100, 120), where (0, 0) is the top-left of the
// screen in an 18-point Helvetica font
glRasterPos2i(100, 120);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
glutBitmapString(GLUT_BITMAP_HELVETICA_18, "text to render");
【讨论】:
感谢亚当的帮助。另外,很长一段时间它一直告诉我 glutBitmapString 没有定义,我最终在 GL/glui.h 中发现它被命名为“_glutBitmapString”。知道为什么吗?glutBitmapString
是在freeglut
上实现的扩展,在旧的glut
中不存在,必须包含GL/freeglut.h
而不是GL/glut.h
【参考方案2】:
添加到亚当的答案,
glColor4f(0.0f, 0.0f, 1.0f, 1.0f); //RGBA values of text color
glRasterPos2i(100, 120); //Top left corner of text
const unsigned char* t = reinterpret_cast<const unsigned char *>("text to render");
// Since 2nd argument of glutBitmapString must be const unsigned char*
glutBitmapString(GLUT_BITMAP_HELVETICA_18,t);
查看https://www.opengl.org/resources/libraries/glut/spec3/node76.html 了解更多字体选项
【讨论】:
以上是关于如何在 C++ 中使用 glutBitmapString() 将文本绘制到屏幕上?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual C++ 2010 中使用 C++ 库 [重复]