Opengl 修改帧缓冲区内容时出现问题
我试图旋转帧缓冲区的内容,将其放入纹理,然后将其放回缓冲区。我得到一个白色的旋转矩形。我怀疑我忽略了一些显而易见的事情。以下是我正在使用的代码:Opengl 修改帧缓冲区内容时出现问题,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.h
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);
无法使用glCopyTexImage2D创建纹理,只能将数据复制到纹理,但此阶段的纹理不完整,因此会得到黑色/白色纹理(表示未完成状态) 解决方案:使用以下内容创建纹理:
glGenTextures(....)
glBindTexture(...)
glTexParameter(...) //Set MIN/MAG filter
glTexImage2D(....., NULL)
glTexImage2D定义纹理图像,当您要渲染到此纹理(或复制到此纹理)时,可以为最后一个参数传递NULL,以便创建纹理备份存储,但其内容未定义。另一个建议是使用帧缓冲区对象(FBO)直接绘制到纹理中(无副本)发布纹理创建代码。glCopyTexImage2d是纹理创建代码(如果我正确阅读手册页)。AUX1缓冲区是使用组合向量和纹理技术在一段时间内建立起来的。在这段代码中,我创建了一个临时纹理来旋转AUX1缓冲区内容,然后将它们放回原处。