我试图渲染一个字体,但当我渲染它相对于纹理小(纹理是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,这种效果也会持续
1条答案
按热度按时间k75qkfdt1#
glTexParameteri
设置当前绑定纹理的参数。因此,必须在glBindTexture
之后调用glTexParameteri
。例如: