Рендеринг в FBO не работает, gDEBugger говорит иначе - PullRequest
2 голосов
/ 12 августа 2010

Я пытаюсь визуализировать текстуру, используя FBO. При попытке сделать это, gDEBugger показывает правильную текстуру, но при рисовании на четырехугольнике она просто «белая» / glColor4f.

Вот код для создания текстуры, fbo и renderbuffer:

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

glGenRenderbuffers(1, &rb);
glBindRenderbuffer(GL_RENDERBUFFER, rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);

glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rb); 

glBindFramebuffer(GL_FRAMEBUFFER, 0); 
glBindRenderbuffer(GL_RENDERBUFFER, 0);

Визуализация на текстуру:

glBindFramebuffer(GL_FRAMEBUFFER, fbo);     
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glColor4f(1.0f, 0.5f, 0.2f, 1.0f);

glBegin(GL_TRIANGLES);
    glVertex3f(10, 10, 0);
    glVertex3f(210, 30, 1);
    glVertex3f(50, 150, 1);
glEnd();

glBindFramebuffer(GL_FRAMEBUFFER, 0); 

А вот как я отрисовываю квад с текстурой:

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

glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 1.0f);
    glVertex2f(0, 0);
    glTexCoord2f(1.0f, 1.0f);
    glVertex2f(width, 0);
    glTexCoord2f(1.0f, 0.0f);
    glVertex2f(width, height);
    glTexCoord2f(0.0f, 0.0f);
    glVertex2f(0, height);
glEnd();

glDisable(GL_TEXTURE_2D);

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

1 Ответ

4 голосов
/ 12 августа 2010

Ваша текстура выглядит неполной.

У вас нет для этого мип-карт, и вы не выбрали режим фильтрации, который бы обошел это.

Попытка:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

Тем не менее, вы все равно должны видеть полигоны, но без правильной текстуры, без этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...