Визуализация текста на переднем плане - PullRequest
4 голосов
/ 26 февраля 2012

Я пытаюсь визуализировать некоторые строки на переднем плане в приложении OpenGL / GLUT под MacOSX 10.7.2.

В данный момент я использую этот код для рисования нескольких линий на переднем плане, и он отлично работает.

void drawForeground() {

int width = 10;
int height = 10;

glMatrixMode(GL_PROJECTION);                    
glPushMatrix(); 
glLoadIdentity();                           
glOrtho(-1, width, -1, height, -1, 1);      
glMatrixMode(GL_MODELVIEW);         

glPushMatrix(); 
glLoadIdentity();

glDepthMask(GL_FALSE);          

glBegin(GL_LINES);
//Draw the lines
glEnd();

/*********************/

glPopMatrix();      
glMatrixMode(GL_PROJECTION);                    
glPopMatrix();  
glDepthMask(GL_TRUE);   

}

Теперь я хотел бы также нарисовать некоторый текст.В предыдущей функции я добавил этот фрагмент кода в строку, где я поставил звездочки:

glRasterPos2d(2,2);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, 'c');

, но это не сработало.Если я использую те же две строки вне метода drawForeground, появляется 'c'.
Я уже позвонил glDisable(GL_TEXTURE_2D) и ничего не изменилось.

Может ли кто-нибудь помочь мне понять мою ошибку?

Решение:

Оказалось, что решением было отключить освещение с помощью glDisable(GL_LIGHTING), включив его после рендеринга текста.

Я хотел бы подчеркнуть, что текст отображается всегда приодно и то же измерение независимо от параметров вызова glOrtho.

1 Ответ

2 голосов
/ 04 марта 2012

Ничего определенного, но пара вещей, которые можно попробовать, если вы еще этого не сделали:

Какой цвет установлен перед вызовом glutBitmapCharacter ()?Если цвет рисования установлен на что-то, что не отображается на фоне, это может выглядеть так, будто ничего не рисуется.

Вы пытались вызвать glDisable (GL_TEXTURE) в дополнение к glDisable (GL_TEXTURE_2D)?

Существуют ли другие вещи, такие как освещение, которые вы включаете где-либо еще в своем коде, а затем не отключаете перед отображением текста, который может повлиять на вещи?Когда я сталкивался с подобными ошибками в прошлом, кажется, что они часто связаны с чем-то в состоянии OpenGL, находящимся в состоянии, которого я не ожидал, часто потому, что я внес некоторые изменения в состояние в другом месте и забыл отменитьЭто.Я бы порекомендовал вам попытаться систематически комментировать различные вызовы OpenGL в вашем коде, даже если они не кажутся напрямую связанными, и посмотреть, появляются ли символы когда-либо.Если они это сделают, то вы будете знать, какое изменение состояния нужно сделать / отменить.

...