gpt4 book ai didi

opengl - glsl 片段着色器 - 如何将 GL_NEAREST 纹理采样为 GL_LINEAR

转载 作者:行者123 更新时间:2023-12-05 00:42:28 27 4
gpt4 key购买 nike

我使用 MAG_FILTERING = GL_NEAREST 设置了纹理。

我不希望将其设置为 GL_LINEAR,但在我的一个着色器中,我想获取纹理的内容,就好像它是 GL_LINEAR。

我一直在努力寻找答案,但找不到任何可靠的东西,也找不到任何例子。

目前的代码是:

uniform sampler2DRect sampler1;
in vec2 vTexCoo;

main() {
out_diffuse = texture(sampler1, vTexCoo);
}

理论上我可以构建一个插入 4 个像素的函数,但是嗯……肯定有某种方法可以指定要使用的过滤器。

最佳答案

从 OpenGL 3.3 Core Profile 开始,您可以使用 Sampler Objects指定采样参数。当样本对象绑定(bind)到纹理图像单元时,它基本上会覆盖绑定(bind)的纹理对象的所有内部采样器设置。

使用类似于以下的采样器来始终使用线性过滤:

GLuint sampler = 0;
glGenSamplers(1, &sampler);

glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

将纹理绑定(bind)到纹理单元时,您还必须绑定(bind)采样器对象。

GLuint texture_unit = //The texture unit to which your texture is bound
glBindSampler(texture_unit, sampler);

不要忘记在使用 glBindSampler(texture_unit, 0); 绘制后取消绑定(bind)采样器,因为采样器绑定(bind)到纹理单元而不是特定着色器。

请注意,由于您使用的是矩形纹理,因此不支持 mipmapping。

关于opengl - glsl 片段着色器 - 如何将 GL_NEAREST 纹理采样为 GL_LINEAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73444725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com