Как визуализировать текст поверх QOpenGLTexture? - PullRequest
1 голос
/ 15 января 2020

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

// in initializeGL
QOpenGLTexture t = new QOenGLTexture(img);
t->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
t->setMagnificationFilter(QOpenGLTexture::Linear);

// in printGL
t->bind();
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2i(0, 0);
glTexCoord2f(0, 1); glVertex2i(0, 255);
glTexCoord2f(1, 1); glVertex2i(255, 255);
glTexCoord2f(1, 0); glVertex2i(255, 0);
glEnd();

... он начинает показывать мне текстуру без текста , Нужно ли как-то отсоединять текстуру после использования или как?

1 Ответ

0 голосов
/ 15 января 2020

Необходимо включить двумерное текстурирование, см. glEnable:

glEnable(GL_TEXTURE_2D);

Если текстурирование включено, то по умолчанию цвет текселя умножается на текущий цвет, потому что по умолчанию режим текстурной среды (GL_TEXTURE_ENV_MODE) равен GL_MODULATE. См. glTexEnv.

Это приводит к тому, что цвет текстур текстуры «смешивается» с последним цветом, который вы установили с помощью glColor .

Установите «белый» цвет перед рендерингом текстуры, чтобы решить вашу проблему:

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

Отключите двухмерное текстурирование после рисования четырехугольника:

glEnable(GL_TEXTURE_2D);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2i(0, 0);
glTexCoord2f(0, 1); glVertex2i(0, 255);
glTexCoord2f(1, 1); glVertex2i(255, 255);
glTexCoord2f(1, 0); glVertex2i(255, 0);
glEnd();

glDisable(GL_TEXTURE_2D);
...