我正在使用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
时才会出现此问题。这有什么原因???
答案 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
方法,这段代码就会对您有所帮助。希望这有助于或可能帮助处于类似情况的其他人。