我想在我的程序中渲染n纹理并存储它们以备以后使用。因此,我使用OpenGL FramebufferObject。在
首先,我创建一个包含128个纹理的数组,如下所示
self.textures = glGenTexture(128)
第二步是一个有128次迭代的循环,在这个循环中,我在位置I绑定纹理并将其渲染到其中。在
^{pr2}$最后一步是另一个循环,主游戏循环,在这个循环中,我用纹理数组中的一个纹理渲染一个平面。在
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
gluLookAt(0,0,1,0,0,0,0,1,0)
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, self.texture[i])
glBegin(GL_QUADS)
glNormal3f(0.0, 1.0, 0.0)
glTexCoord2f(0.0, 0.0)
glVertex3f(-1, 1, -1)
glTexCoord2f(1.0, 0.0)
glVertex3f(1, 1, -1)
glTexCoord2f(1.0, 1.0)
glVertex3f(1, -1, -1)
glTexCoord2f(0.0, 1.0)
glVertex3f(-1, -1, -1)
glEnd();
glDisable(GL_TEXTURE_2D)
但是出了点问题,屏幕一直是黑色的。在
纹理用作帧缓冲区对象的颜色附件时,不得绑定。然而,你是捆绑它之前附加,这当然打破了整个事情。在
正确的代码将遍历所有的多重纹理单元,并确保纹理没有绑定在其中任何一个单元中。在
因评论而更新:
在代码中绑定纹理名称并为其设置参数
然后用空数据初始化纹理对象
^{pr2}$最后将其附加为帧缓冲区附件。在
问题是,现在纹理仍然被选择为数据源,因为它是绑定的。纹理不能绑定到任何纹理单元,以用作帧缓冲区颜色附件。此外,FBO必须作为渲染目标绑定到某处。在
下面是一个小的辅助函数,它可以确保给定的纹理对象不绑定在任何纹理单元中:
相关问题 更多 >
编程相关推荐