对纹理的理解

Posted

技术标签:

【中文标题】对纹理的理解【英文标题】:Understanding of textures 【发布时间】:2017-08-06 09:18:03 【问题描述】:

假设我有三个不同的纹理对象,上面有不同的图像数据。这三个纹理对象都绑定到纹理单元 0。

我的场景中有三个模型,每个模型都使用其中一种纹理。

在我的片段着色器中,我有一个 sampler2D 变量。并且所有模型都使用相同的着色器程序进行渲染。

现在我依次做以下操作

    绑定纹理对象 1

    渲染模型 1

    绑定纹理对象2

    渲染模型 2

    绑定纹理对象3

    渲染模型 3

想问的是,您使用不同纹理对不同模型进行纹理处理的方式以及片段着色器中的采样器是否从当前绑定的纹理中读取数据。如果纹理绑定到不同的纹理单元会发生什么,我需要不同的采样器吗?

【问题讨论】:

【参考方案1】:

采样器总是从当前绑定的纹理中读取它所设置的纹理单元。由于默认的活动纹理单元是单元 0,并且采样器的默认值也是 0,因此您的代码应该可以工作,除非您更改采样器或活动纹理单元。

如果将纹理绑定到另一个纹理单元,则必须确保活动纹理单元 (glActiveTexture) 与为采样器设置的值 (glUniform1i) 匹配。如果你绑定,例如,纹理到GL_TEXTURE2,那么你必须将你的采样器设置为glUniform1i(sampler_location, 2)

【讨论】:

以上是关于对纹理的理解的主要内容,如果未能解决你的问题,请参考以下文章

纹理特征提取方法:LBP, 灰度共生矩阵

Android OpenGL ES----理解纹理与纹理过滤

DirectX11--深入理解与使用2D纹理资源

DirectX11--深入理解与使用2D纹理资源

我所理解的cocos2dx - 纹理(下)

深入理解Three.js(WebGL)贴图(纹理映射)和UV映射