【问题标题】:openGL single channel texture always samples 0openGL 单通道纹理总是采样 0
【发布时间】:2020-12-18 14:50:27
【问题描述】:

我正在尝试使用 freetype 在屏幕上呈现字体。为此,我实现了单通道纹理,但它总是采样 0。

cpp

unsigned char *blankData = new unsigned char[8 * 8];
for(int i = 0; i < 8 * 8; i++){
    blankData[i] = 126;
}
    
glActiveTexture(GL_TEXTURE0);

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

GLuint m_texture2D;
glGenTextures(1, &m_texture2D);
glBindTexture(GL_TEXTURE_2D, m_texture2D);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, 8, 8, 0, GL_RED, GL_UNSIGNED_BYTE, blankData);

glUniform1i(glGetUniformLocation(m_program, "texture2D"), 0);

checkGLError();

glGetError() 返回GL_NO_ERROR

片段着色器

#version 330 core

in vec2 texCoord;
in vec4 color;

uniform sampler2D texture2D;
out vec4 outColor;


void main()
{
    vec4 texColor = texture(texture2D, texCoord);
    outColor = vec4(texColor.r, texColor.r, texColor.r, 1.0f);

}

结果

ff00ff: 清晰的颜色

黑色:片段着色器输出texcoord bottomLeft(0, 0) to topRight(1, 1)

【问题讨论】:

    标签: c++ opengl alpha


    【解决方案1】:

    如果您没有生成mipmaps(使用glGenerateMipmap),那么设置GL_TEXTURE_MIN_FILTER 很重要。由于默认过滤器为GL_NEAREST_MIPMAP_LINEAR,因此如果您不将最小化函数更改为GL_NEARESTGL_LINEAR,则纹理将为“Mipmap Incomplete”。

    glBindTexture(GL_TEXTURE_2D, m_texture2D);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2013-04-23
      • 1970-01-01
      相关资源
      最近更新 更多