2010-04-16 2 views
8

Просто интересно, если кто-то может помочь мне разыскать мою проблему с помощью следующего кода, где цвет текста не установлен правильно (его просто делает то, что цвет на заднем плане)Настройка цвета glutBitmapCharacter?

void RenderText(int x, int y, const char *string) 
{ 
int i, len; 

glUseProgram(0); 

glLoadIdentity(); 
glColor3f(1.0f, 1.0f, 1.0f); 
glTranslatef(0.0f, 0.0f, -5.0f); 
glRasterPos2i(x, y); 

glDisable(GL_TEXTURE_2D); 
for (i = 0, len = strlen(string); i < len; i++) 
{ 
    glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int)string[i]); 
} 
glEnable(GL_TEXTURE_2D); 
} 

Я проверил все обычные вещи (я думаю), отключение текстурирования, установка цвета перед растром и т. д. Ive отключенные шейдеры, но у меня все еще есть проблемы

+0

Пожалуйста, пост картины того, что вы наблюдаете. – Bahbar

+0

Когда вы скажем, что это «рендеринг любого цвета в фоновом режиме», вы имеете в виду цвет, заданный с помощью 'glClearColor', или что-то другое? – bcat

ответ

0

Цвет обычно контролируется функцией glColor3f, поэтому, если текст белый и не должен быть то следующие изменения должны помочь:

glLoadIdentity(); 
glColor3f(0.5f, 0.5f, 0.5f);  //<-- this line controls the color (now text is gray) 
glTranslatef(0.0f, 0.0f, -5.0f); 
glRasterPos2i(x, y); 

Кроме того, вызов gldisable (GL_TEXTURE_2D) и glEnable (GL_TEXTURE_2D) не требуется. Вместо этого вы можете просто вызвать glBindTexture (GL_TEXTURE_2D, 0), чтобы отключить текстуры, а затем использовать ту же функцию для установки активной текстуры. Просто убедитесь, что вы вызываете glEnable (GL_TEXTURE_2D) в вашей функции инициализации.

3

Нет цвета сохраняется с любым OpenGL растрового изображения (который является то, что glutBitmapCharacter создан. Точечный рисунок является монохромным и сохраняет только форма.

Когда растровое изображение рисуется (например, glBitmap или, может быть glDrawLists), текущий растр цвет используется. растр цвет не всегда совпадают с активным цветом, см http://www.opengl.org/wiki/Coloring_a_bitmap.

9

Похоже, вы забыли glDisable(GL_LIGHTING) перед рисованием вашей строки.

+1

этот комментарий действительно был спасателем жизни, не смог понять, почему мой текст продолжает появляться в черном. Не могли бы вы объяснить, почему мы должны отключать освещение перед тем, как писать на экран? – geekoraul

+1

Освещение в OpenGL определяет только то, как рассчитываются цвета в определенной точке сцены. Если вы не используете освещение, все, что OpenGL должно рассчитать цвет точки, это ваша команда GLColor (и, возможно, некоторая интерполяция штрихов, но цвет идет от glColor). если вы включите glLighting, есть несколько обстоятельств, которые влияют на цвет точки: положение и цвет источника света, материал точки, цвет материала точки и текстуру. поэтому отключите его, чтобы сообщить openGL, чтобы сделать следующее с вашим glColor, не более того. –

+0

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

Смежные вопросы