OpenGL растровый текст не удается после рисования многоугольника - PullRequest
0 голосов
/ 04 апреля 2010

Я использую 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);

Как вы видите, это очень просто, и единственное, что он должен сделать, это нарисовать четырехугольник и нарисовать текст "Тест". Но проблема в том, что рисование многоугольника, кажется, портит любые текстовые операции, которые я пытаюсь выполнить после него. Если я размещу функции рисования текста перед многоугольником, и текст, и многоугольник будут хорошо рисоваться. Я что-то упускаю здесь?

Редактировать: эта проблема возникает, только когда окно запускается в полноэкранном режиме, ChangeDisplaySettings. Любая причина, почему это будет ??

1 Ответ

1 голос
/ 27 июня 2012

Я знаю, что это может быть очень поздний ответ, но я наткнулся на этот вопрос в поисках ответов на эту конкретную проблему. Способ, которым я пытался нарисовать текст поверх многоугольника, немного отличается. У меня есть метод, который выглядел так:

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. Надеюсь, что это помогает или может помочь другим людям, которые находятся в аналогичной ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...