openGL渲染纹理渲染总是黑色的几何

这是可能会出错的代码中唯一的部分:

        GLuint tex_name;
        glGenTextures(1, &tex_name);
        // set id to the gl_texture_id map for later use
        gl_texture_id[t] = tex_name;
        // bind texture
        glBindTexture(GL_TEXTURE_2D, tex_name);
        // set texture filtering parameters
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        glGenerateMipmap(GL_TEXTURE_2D);
        // load texture data
        glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,t->width(),t->height(),0,GL_BGRA,GL_UNSIGNED_BYTE,t->data());

你能在这段代码中看到错误吗? 启用glEnable(GL_TEXTURE_2D)没有什么不同。 纹理坐标是正确的,片段和顶点着色器是正确的。

解决这不是问题,我仍然在glTexImage2D(...)之前使用glGenerateMipmap(...)。 真正的问题是,当我的图像处于GL_RGB格式时,我传递格式为GL_RGBA。 另外我的t-> data()数组的长度为height * width * sizeof(GL_FLOAT)长,我传递GL_UNSIGNED_BYTE作为类型参数导致数据丢失。 Althougth这个作品你仍然有权利,事实上glTexImage2D与glGenerateMipmap在Nvidia硬件上造成奇怪的影响,而ATI GPU上的生活是美好的(奇怪的)。


为什么在没有数据存储的纹理上调用glGenerateMipmap (...)

在这个工作之前,你至少需要分配0级的图像(比如调用glTexImage2D (...) ,你应该在每帧画出你的纹理之后调用这个函数,你现在的方式实际上什么都不做,当你最终画出你的纹理时,你只会生成一个LOD的图像,如果你不打算在每次给纹理图像0级数据时重新计算mipmap,我会移除mipmap纹理过滤器。

我也不明白这与渲染纹理有什么关系? 您正在将图像数据从客户端内存传递到您的纹理。 通常,当渲染到纹理时,可以使用像素缓冲区(老派)或帧缓冲区对象完成此操作。

链接地址: http://www.djcxy.com/p/38539.html

上一篇: openGL render to texture renders always black geometry

下一篇: GLSL fragment shader output type