代码之家  ›  专栏  ›  技术社区  ›  LandonSchropp

加剧OpenGL纹理问题

  •  0
  • LandonSchropp  · 技术社区  · 15 年前

    我在尝试将纹理加载到VRAM中时遇到问题。我在Mac OS X上使用OpenGL,我已经成功地将一种颜色传递到我的片段着色器中。但是,一旦我尝试加载一个纹理,没有几何体得到渲染,我只能看到背景色。这是我的纹理加载代码:

    char imageData[27] = {
        127, 127, 127,
        127, 127, 127,
        127, 127, 127,
        127, 127, 127,
        127, 127, 127,
        127, 127, 127,
        127, 127, 127,
        127, 127, 127,
        127, 127, 127,
    };
    
    glActiveTexture(GL_TEXTURE0);
    GLuint textureID;
    glGenTextures(1, &textureID);
    glBindTexture(GL_TEXTURE_2D, textureID);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
    
    GLint uniform_location = glGetUniformLocation(bundle->GetShaderProgramID(), "texture");
    std::cout << uniform_location <<std::endl;
    glUniform1i(uniform_location, 0);
    
    glEnable(GL_TEXTURE_2D);
    

    下面是我的片段着色器代码:

    uniform sampler2D texture;
    
    void main()
    {
        vec2 coord = vec2(0.5, 0.5);
    
        //gl_FragColor = vec4(coord, 0.0, 1.0);
    
        gl_FragColor = vec4(texture2D(texture, coord).rgb, 1.0);
    }
    

    我意识到有些代码可能是不必要的,但我一直在尝试我能想到的一切。

    谢谢。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Bahbar    15 年前

    最可能的原因是没有禁用mipmapping,并且没有指定mipmapping级别。所以你的质地是 不完整 .

    关闭此纹理对象(围绕glTexImage2D调用执行)

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    

    怎样 失败会有帮助的。