GLSL texture()
在 GLSL(OpenGL Shading Language) 中,texture 是指纹理贴图,是图形渲染中常用的一种资源,用来为3D对象提供丰富的表面细节(如颜色、凹凸感等)。GLSL 提供了许多函数来访问和操作纹理数据,通常用于片元着色器(Fragment Shader)中。
一、纹理基本概念
-
纹理(Texture) 是一个多维的数据集合,通常是一张2D图片,也可以是1D、3D、立方体贴图等。
-
采样器(Sampler) 是 GLSL 中访问纹理的变量类型,它将纹理与着色器连接起来。
二、GLSL中的常见采样器类型
类型 | 维度 | 描述 |
---|---|---|
sampler1D | 1D纹理 | 一维纹理 |
sampler2D | 2D纹理 | 最常见的纹理类型 |
sampler3D | 3D纹理 | 三维纹理,用于体积效果等 |
samplerCube | 立方体纹理 | 用于环境贴图等 |
三、使用纹理的步骤(简要)
-
在 CPU 端(OpenGL)中:
-
创建并绑定纹理对象
-
加载图像数据
-
配置纹理参数
-
将纹理传递到着色器中
-
-
在 GLSL 中:
-
声明一个
uniform sampler2D
类型的变量来接收纹理 -
使用
texture()
函数进行采样
-
四、GLSL 纹理采样函数
vec4 texture(sampler2D sampler, vec2 coord);
-
参数解释:
-
sampler2D sampler
:表示要采样的纹理 -
vec2 coord
:纹理坐标,范围通常是 [0.0, 1.0]
-
-
返回值:
-
返回一个
vec4
,表示纹理在该坐标下的 RGBA 颜色值
-
五、示例代码
片元着色器中使用纹理
uniform sampler2D uTexture; // 来自CPU传入的纹理
in vec2 vTexCoord; // 从顶点着色器传入的纹理坐标
out vec4 fragColor;void main() {fragColor = texture(uTexture, vTexCoord);
}
六、注意事项
-
纹理坐标超出 [0,1] 范围时,会根据纹理的**包裹模式(wrapping mode)**重复、镜像或夹取。
-
纹理采样时可能会发生模糊或失真,可通过**过滤方式(filtering)**控制。
-
texture2D()
是旧版GLSL中的函数,现代GLSL使用texture()
。