绘制多边形后,OpenGL位图文本失败

时间:2010-04-04 00:38:20

标签: opengl winapi

我正在使用Win32和OpenGL在窗口上绘制文本。我正在使用位图字体方法,wglUseFontBitmaps。这是我的主要渲染功能:

glClear(GL_COLOR_BUFFER_BIT);

glPushMatrix();
    glColor3f(1.0f, 0.0f, 1.0f);
    glBegin(GL_QUADS);
        glVertex2f(0.0f, 0.0f);
        glVertex2f(128.0f, 0.0f);
        glVertex2f(128.0f, 128.0f);
        glVertex2f(0.0f, 128.0f);
    glEnd();
glPopMatrix();

glPushMatrix();
    glColor3f(1.0f, 1.0f, 1.0f);
    glRasterPos2i(200, 200);
    glListBase(fontList);
    glCallLists(5, GL_UNSIGNED_BYTE, "Test.");
glPopMatrix();

SwapBuffers(hDC);

正如你所看到的那样,它非常简单,它应该做的唯一事情就是绘制一个四边形并绘制文本“Test。”。但问题是绘制一个多边形似乎搞砸了我尝试做的任何文本操作。如果我将文本绘图功能放在多边形之前,则文本和多边形都可以正常绘制。这里有什么我想念的吗?

编辑:只有在全屏显示窗口ChangeDisplaySettings时才会出现此问题。这有什么原因???

1 个答案:

答案 0 :(得分:1)

我知道这可能是一个非常晚的回复,但我遇到了这个问题寻找这个确切问题的答案。我尝试在多边形上绘制文本的方式略有不同。我有一个看起来像这样的方法:

glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glRasterPos2f( pX, pY );

glPushAttrib( GL_LIST_BIT );
glListBase( base - 32 );
glCallLists( length( pText ), GL_UNSIGNED_BYTE, PChar( pText ) );
glPopAttrib();

我尝试在上面绘制一个多边形和文字:

glPushMatrix();
glBegin(GL_QUADS);
  glColor( 1.0, 0.0, 0.0 );
  glVertex2f( fX, fY );
  glVertex2f( fX + fWidth, fY );
  glVertex2f( fX + fWidth, fY + fHeight );
  glVertex2f( fX, fY + fHeight );
glEnd( );
glColor( 0.0, 1.0, 0.0 );
Text( 100, 100, fCaption );
glPopMatrix();

但是,类似于你的问题,只有文本会绘制,或者在某些情况下(在稍微移动Text方法之后)什么都不会绘制。我意识到这个方法有

glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );

在我绘制多边形之后,在我绘制文本之前,显然已经清除了缓冲区...这是一个如此愚蠢的错误,虽然我没有在您提供的代码中识别出任何类似的代码,但它可能在其他地方。无论哪种方式,只要清除glClear方法中的Text方法,这段代码就会对您有所帮助。希望这有助于或可能帮助处于类似情况的其他人。