gpt4 book ai didi

c++ - 使用 GLUT 简单地打印文本

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:17 25 4
gpt4 key购买 nike

整个晚上,我一直在 Internet 上四处寻找,包括 stackoverflow 和其他地方,想找到一些关于如何在 GLUT 上打印文本的内容。虽然我找到了说明如何操作的地方,但没有人解释得很好,说函数的哪些部分是必需的,哪些部分不是。我还尝试复制一些最接近成功的代码,这些代码使我的整个屏幕变白,除了一些蓝色像素。所以我放弃了,我希望这会为我和许多像我一样感到困惑的人消除困惑。

所以,我找到了这段代码:

glColor3f(1.0f, 0.0f, 0.0f);
glRasterPos2f(1280, 720);
int len = menu.length();
for (int i = 0; i < len; i++) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, menu[i]);
}

我已经把它放在我的代码中了:

void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(-_cameraAngle, 0.0f, 1.0f, 0.0f);
glTranslatef(0.0f, 0.0f, -9.0f + zoom);

glTranslatef(0.0f, -1.0f, 0.0f);

string menu = "Hello!";

glColor3f(1.0f, 0.0f, 0.0f);
glRasterPos2f(1280, 720);
int len = menu.length();
for (int i = 0; i < len; i++) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, menu[i]);
} /*if I need to post the rest of drawScene(), which is the function delegated
as the Display Func, tell me. I don't want to because it's long

我想知道的是我做错了什么,以及处于我这个位置的 future 读者需要做什么才能获得好的结果。

最佳答案

你没有说具体有什么问题,但我怀疑你的文字没有显示出来。原因很可能是光栅位置被剪裁,这导致您的文本无法呈现。

光栅位置是绘制位图的“ anchor ”。通常,这是位图的左下角(glBitmap 可以通过将 xy 参数设置为其他值来更改它不是零,但假设你没有这样做)。光栅位置由模型 View 矩阵转换,就像几何图元中的顶点一样。就像顶点一样,如果转换后的光栅位置位于视口(viewport)之外,则会被裁剪,并且不会渲染任何内容。此处需要了解的重要一点是,位图的任何渲染 - 无论其大小 - 都基于视口(viewport)内的光栅位置。

在您的示例中,您没有显示正在使用的视口(viewport),也没有显示投影变换(GL_PROJECTION 堆栈上的矩阵),但您将光栅位置设置为 (1280, 720 ),这很可能在视口(viewport)之外。

假设您要在窗口的左下角呈现文本(为了便于讨论,假设您的窗口是 1280 x 1024)。当需要呈现您的文本时,将以下内容放入您的呈现例程中:

glMatrixMode( GL_PROJECTION );
glPushMatrix();
glLoadIdentity();
gluOrtho2D( 0, 1280, 0, 1024 );

glMatrixMode( GL_MODELVIEW );
glPushMatrix();
glLoadIdentity();
glRasterPos2i( 10, 1014 ); // move in 10 pixels from the left and bottom edges
for ( int i = 0; i < len; ++i ) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, menu[i]);
}
glPopMatrix();

glMatrixMode( GL_PROJECTION );
glPopMatrix();
glMatrixMode( GL_MODELVIEW );

根据您使用的 OpenGL 版本,您可以使用更简单的例程 glWindowPos2i()(2i 可以替换为其他维度- type pairs like other OpenGL functions),它绕过模型 View 和投影矩阵转换光栅位置,直接在窗口坐标中工作。在这种情况下,您可以将上面的代码编写为:

glWindowPos2i( 10, 1014 );  // move in 10 pixels from the left and bottom edges
for ( int i = 0; i < len; ++i ) {
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, menu[i]);
}

关于c++ - 使用 GLUT 简单地打印文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20866508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com