欢迎光临散文网 会员登陆 & 注册

纹理单元

2023-08-06 15:59 作者:追逐彗星的尾巴  | 我要投稿

上一节的最后我们提到了,在着色器代码中,我们声明了一个uniform的sampler2D类型的变量,却没有给它赋值。如果使用函数glUniform1i(),我们可以给纹理采样器分配一个位置值,这样的话我们能够在一个片段着色器中设置多个纹理。

location是uniform变量的位置,我们用value为纹理采样器赋值,这个值被称为纹理的位置值。一个纹理的位置值通常称为一个纹理单元(Texture Unit)。一个纹理的默认纹理单元是0,所以上一节我们没有分配一个位置值。纹理单元的主要目的是让我们在着色器中可以使用多个纹理。

要使用多个纹理,首先要在着色器中增加纹理采样器:

最终输出的颜色是两个纹理的结合,这里使用了GLSL中的函数mix()。mix是一个用于执行线性插值的函数。

x:起始值;y:结束值;a:插值因子。

当a为0时,结果为x,当a为1时,结果为y。当a在0和1之间时,mix函数会在x和y之间进行线性插值,生成一个平滑的过渡值。

下一步我们载入并创建另一个纹理,不再赘述。

为了同时使用两个纹理,我们需要调用函数glActiveTexture()glBindTexture()定义哪个采样器对应哪个纹理单元。

glActiveTexture用于激活多重纹理单元,以便在渲染时能够设置和使用多个纹理。

函数的参数是一个枚举值,表示要激活的纹理单元。常用的纹理单元枚举值如GL_TEXTURE0GL_TEXTURE1GL_TEXTURE2,这里的数字后缀就是我们在glUniform1i中设置的位置值。

下面是使用两个纹理的效果:


纹理单元的评论 (共 条)

分享到微博请遵守国家法律