opengl 渲染大图像时出现奇怪的线条图案

hmmo2u0o  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(190)

我试图渲染一个字体,但当我渲染它相对于纹理小(纹理是2048 x2048一个通道,但它是一个完整的位图,所以每个字符在图像中是小),它创建了一个奇怪的正方形/线条模式。

(the纹理是模糊的,因为它是sdf,但我已经使用了一个正常的着色器进行调试)
顶点着色器:非常明显的“e”和“p”

#version 330 core
in vec4 vertex;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

out vec2 TexCoord;

void main()
{
    gl_Position = projection * view * model * vec4(vertex.xy, 0.0, 1.0);
    TexCoord = vertex.zw;
}

片段着色器:

#version 330 core
out vec4 FragColor;

in vec2 TexCoord;

uniform sampler2D ourTexture;

void main()
{
    FragColor = vec4(1.0, 1.0, 1.0, texture(ourTexture, TexCoord).r);
}

纹理编码:

int width, height, nrChannels;
    unsigned char *img_data = stbi_load(image, &width, &height, &nrChannels, 1);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glBindTexture(GL_TEXTURE_2D, font->texture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, img_data);
    glGenerateMipmap(GL_TEXTURE_2D);

(yes,图像只有一个通道)
这种效果非常烦人,而且似乎不会消失。即使GL_TEXTURE_MIN_FILTER设置为GL_LINEAR,这种效果也会持续

k75qkfdt

k75qkfdt1#

glTexParameteri设置当前绑定纹理的参数。因此,必须在glBindTexture之后调用glTexParameteri。例如:

glBindTexture(GL_TEXTURE_2D, font->texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

相关问题