C++ 使用GLUT简单地打印文本

C++ 使用GLUT简单地打印文本,c++,glut,C++,Glut,整个晚上,我一直在互联网上四处寻找,包括stackoverflow和其他地方,想找到一些关于如何在超负荷打印文本的信息。虽然我已经找到了一些地方说明了如何实现,但没有人能很好地解释它,比如说函数的哪些部分是必需的,哪些部分不是必需的。我还尝试复制一些代码,最接近成功的是使我的整个屏幕除了一些蓝色像素外都变成白色的东西。所以我放弃了,我希望这能为我和很多像我一样困惑的人消除困惑 因此,我发现了以下代码: glColor3f(1.0f, 0.0f, 0.0f); glRasterPos2f(

整个晚上,我一直在互联网上四处寻找,包括stackoverflow和其他地方,想找到一些关于如何在超负荷打印文本的信息。虽然我已经找到了一些地方说明了如何实现,但没有人能很好地解释它,比如说函数的哪些部分是必需的,哪些部分不是必需的。我还尝试复制一些代码,最接近成功的是使我的整个屏幕除了一些蓝色像素外都变成白色的东西。所以我放弃了,我希望这能为我和很多像我一样困惑的人消除困惑

因此,我发现了以下代码:

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]);
    }
glColor3f(1.0f,0.0f,0.0f);
glRasterPos2f(1280720);
int len=menu.length();
对于(int i=0;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
void drawsecene(){
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glRotatef(-U摄像机角度,0.0f,1.0f,0.0f);
glTranslatef(0.0f,0.0f,-9.0f+缩放);
glTranslatef(0.0f,-1.0f,0.0f);
字符串菜单=“你好!”;
GL3F(1.0f,0.0f,0.0f);
glRasterPos2f(1280720);
int len=menu.length();
对于(int i=0;i

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

你没有说具体错在哪里,但我怀疑你的文本没有显示出来。原因可能是光栅位置被剪裁,这导致你的文本无法呈现。

光栅位置是绘制位图的“定位点”。通常,这是位图的左下角(通过将x和y参数设置为零以外的值,
glBitmap
可以更改该位置,但假设您没有这样做)。光栅位置由模型视图矩阵进行变换,就像几何图元中的顶点一样。而且,就像顶点一样,如果变换后的光栅位置位于视口之外,则会对其进行剪裁,而不会进行任何渲染。这里需要知道的是,位图的任何渲染(无论大小)都是基于e位于视口内部的光栅位置

在您的示例中,您不显示正在使用的视口,也不显示投影变换(投影堆栈上的矩阵),而是将光栅位置设置为(1280720),这可能在视口之外

假设您希望在窗口的左下角渲染文本(为了便于讨论,假设您的窗口为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 );

不幸的是,这两种方法都不管用。有没有办法在这种情况下测试它有什么问题?只需从最受控制的情况开始,比如在标准化设备坐标下渲染,然后将对象定位在原点,看看是否有任何显示。我仍然打赌这与视口或剪辑问题有关,但我们需要更多的inf我在左上角看到了一些文字,结果发现1014的数字太高了。非常感谢你,我已经试了这么久了。
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]);
}