首页 > 解决方案 > 为什么 OpenGL 调整大小的图像看起来像素化?

问题描述

我想在 2 个正方形上显示 2 个纹理。这是它的样子。 在此处输入图像描述

左侧325x325(与图片大小相同),右侧(100x100)

图像尺寸为 325x325。如何让右侧的纹理更加锐利。获得良好质量的唯一方法是使用相同大小的纹理和对象。我正在使用 PNG 图像和以下 GL 方法。

gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, gl::LINEAR as i32);
gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::LINEAR as i32);

我的顶点

#version 430 core
layout(location = 0) in vec2 position;
layout(location = 1) in vec2 texCoord;
layout(location = 2) in float layer;
out vec2 uv;
out float layer_get;
uniform mat4 MVP;

void main()
{
    gl_Position = MVP * vec4(position.x, position.y, 0.0, 1.0);
    uv = texCoord;
    layer_get = layer;
}

我的片段

#version 430 core
out vec4 color;

in vec2 uv;
in float layer_get;

layout (binding=0) uniform sampler2DArray textureArray;

void main()
{
   color = texture(textureArray, vec3(uv.x,uv.y, 0));
}

先感谢您

标签: openglrust

解决方案


如评论和链接问题中所述,您可以通过三线性过滤和生成Mipmaps来提高质量。

使用“mipmap”纹理缩小函数之一gl::NEAREST_MIPMAP_NEARESTgl::LINEAR_MIPMAP_NEAREST或:gl::NEAREST_MIPMAP_LINEARgl::LINEAR_MIPMAP_LINEAR

gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::LINEAR_MIPMAP_LINEAR as i32);

gl::GenerateMipmap通过指定二维纹理图像后(后)生成mip图gl::TexImage2D

gl::GenerateMipmap(gl::TEXTURE_2D)

推荐阅读