#opengl
#opengl
Вопрос:
Я пытаюсь повернуть содержимое буфера кадров, поместив его в текстуру, а затем поместив обратно в буфер. Я получаю белый повернутый прямоугольник. Я подозреваю, что я упускаю из виду что-то очевидное. Вот код, который я использую:
glReadBuffer(GL_AUX1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textures[1]);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, rect.width(),
rect.height(), 0);
glDrawBuffer(GL_AUX1);
glPushMatrix();
glRotatef(head - new_head, 0, 0, -1);
glBegin(GL_POLYGON);
glTexCoord2f(0, 0);
glVertex2f(-1, -1);
glTexCoord2f(0, 1);
glVertex2f(-1, 1);
glTexCoord2f(1, 1);
glVertex2f(1, 1);
glTexCoord2f(1, 0);
glVertex2f(1, -1);
glEnd();
glPopMatrix();
glDisable(GL_TEXTURE_2D);
Я решил проблему. Добавление этих строк, чтобы заставить его работать:
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Комментарии:
1. Опубликуйте свой код для создания текстуры.
2. glCopyTexImage2D — это код создания текстуры (если я правильно читаю справочную страницу). Буфер AUX1 создается в течение определенного периода времени с использованием комбинации векторных и текстурных методов. В этом сегменте кода я создаю временную текстуру, чтобы повернуть содержимое буфера AUX1, а затем поместить их обратно.
Ответ №1:
Вы не можете создать текстуру с помощью glCopyTexImage2D, вы только копируете данные в текстуру, но текстура на этом этапе не завершена, поэтому вы получаете черно-белую текстуру (признак незавершенного состояния).
Решение: Создайте текстуру с:
glGenTextures(....)
glBindTexture(...)
glTexParameter(...) //Set MIN/MAG filter
glTexImage2D(....., NULL)
glTexImage2D определяет изображение текстуры, поскольку вы хотите отобразить эту текстуру (или скопировать в нее), вы передаете NULL для последних параметров, поэтому хранилище текстур создается, но его содержимое остается неопределенным. Другое предложение заключается в использовании объектов фреймбуфера (FBO) для рисования непосредственно в текстуре (без копирования)