Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2020, 16:32   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию Изменение цвета текстурного шрифта OpenGL

Вывожу текст в OpenGL так:
Код:

void glTextOut(int xPos, int yPos, const char* sText, ...){
	glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
    glDisable(GL_DEPTH_TEST);
	glEnable(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D, fontTex);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho(0.0, (double)glScreenWidth, 0.0, (double)glScreenHeight, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();

    glTranslatef(xPos, glScreenHeight - 20 - yPos, 0.0);
    glListBase(hFontLists - 32);

    char text[256];
    va_list vl;
    va_start(vl, sText);
    vsprintf(text, sText, vl);
    va_end(vl);

    glCallLists(strlen(text), GL_BYTE, text);

    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();

    glDisable(GL_TEXTURE_2D);
    glEnable(GL_DEPTH_TEST);
    glDisable(GL_BLEND);
}
вызов:
Код:
void RenderScene(){
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glColor3f(1.0, 0.0, 0.0);
	glTextOut(10, 10, (char*)"abcdefuck12345666");
}
Если цвет фона экрана чёрный, то всё нормально. А если не чёрный, то цвета начинают смешиваться и буквы выводятся не тем цветом.
А если выключить BLEND, то, во-первых символы получаются плохого качества и невозможно разобрать, что написано. А во-вторых: символы рисуются на чёрном фоне.
Текстура шрифта взята из исходников NeHe.
Изображения
Тип файла: bmp font.bmp (65.1 Кб, 1 просмотров)
BLACK_RAIN вне форума Ответить с цитированием
Старый 07.02.2020, 13:55   #2
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Проблема, собственно, не в шрифтах. А в том, что не получается сделать прозрачной саму текстуру.
Открываем фотошоп, создаём растр 256х256 с прозрачным фоном. Пишем на нем большую белую букву "A" и сохраняем как PNG. По-идее, там где на картинке белый цвет, он должен меняться через glColor(), а остальное должно быть прозрачным. Но это почему-то не работает.
Код:
void RenderScene(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D(0.0, glScreenWidth, glScreenHeight, 0.0);
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();

    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, tex1);

    glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_GREATER, 0.0);



    glBegin(GL_QUADS);
    glColor3f(1.0, 1.0, 0.0);
    int x = 50;
    int y = 50;
    glTexCoord2f(0.0, 0.0);
    glVertex3f(x, y, 0.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(x + 100.0, y, 0.0);
    glTexCoord2f(1.0, 1.0);
    glVertex3f(x + 100.0, y + 100.0, 0.0);
    glTexCoord2f(0.0, 1.0);
    glVertex3f(x, y + 100.0, 0.0);
    glEnd();
    glDisable(GL_ALPHA_TEST);

    glDisable(GL_TEXTURE_2D);

    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();


}
Меняется просто цвет всей текстуры. Как заставить ее быть прозрачной?

файл прикрепился как JPG, но в реале это PNG
Изображения
Тип файла: jpg A.jpg (1.7 Кб, 1 просмотров)

Последний раз редактировалось BLACK_RAIN; 07.02.2020 в 19:02.
BLACK_RAIN вне форума Ответить с цитированием
Старый 07.02.2020, 18:59   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Разобрался! Просто я сохранял картинку как PNG 16 bits, а надо было 8 бит.
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое изменение цвета шрифта в ячейке таблицы xwicked JavaScript, Ajax 3 27.05.2016 23:41
Изменение цвета шрифта надписи в ListBox Lokos Общие вопросы Delphi 2 20.02.2013 22:58
OpenGL Изменение цвета revaldo666 Общие вопросы C/C++ 1 29.07.2010 11:51
Изменение цвета (opengl) revaldo666 Общие вопросы C/C++ 0 26.07.2010 15:13
Изменение цвета шрифта в терминале tools Qt и кроссплатформенное программирование С/С++ 3 28.05.2010 10:51