texture
函数用于对一个纹理进行采样,返回采样结果。它的语法如下:
vec4 texture(sampler2D sampler, vec2 coord [, float bias])
vec4 texture(samplerCube sampler, vec3 coord [, float bias])
其中,第一个参数 sampler
表示纹理的采样器。第二个参数 coord
表示要采样的纹理坐标。第三个可选参数 bias
表示采样偏移量,如果没有提供则默认为0。
texture
函数可以取样 2D 纹理和立方体纹理,取样结果将被返回为 vec4
,其各个分量的值代表纹理的颜色值,范围为 0-1。
使用 texture
函数的示例代码:
uniform sampler2D textureSampler;
varying vec2 texCoords;
void main() {
vec4 color = texture(textureSampler, texCoords);
// 进一步处理采样结果
}
uniform samplerCube textureSampler;
varying vec3 texCoords;
void main() {
vec4 color = texture(textureSampler, texCoords);
// 进一步处理采样结果
}
sampler
表示采样器,可以是 sampler2D
或者 samplerCube
。
coord
表示要采样的纹理坐标。如果 sampler
是一个 sampler2D
,那么 coord
应该是一个二维向量 vec2
。
如果 sampler
是一个 samplerCube
,那么 coord
应该是一个三维向量 vec3
。
bias
是一个可选参数,用于对采样结果进行偏移。如果没有提供,则默认为 0。
texture
函数的返回值是一个 vec4
向量,包含了取样结果的 RGBA 分量的值,分量的范围为 0-1。
假设有一张 2D 纹理,宽度为 1024,高度为 1024,采用 RGBA 格式(每个像素有四个分量,用来表示红、绿、蓝、透明度),对应的采样器如下:
uniform sampler2D textureSampler;
我们可以使用 texture
来获取纹理像素(即颜色值):
vec2 uv = vec2(0.5, 0.5); // 假设要取样的点是正中心
vec4 pixelColor = texture(textureSampler, uv);
// pixelColor 就是纹理中点的颜色值,可以进行后续处理
如果有一个立方体纹理采样器,代码如下所示:
uniform samplerCube textureSampler;
我们可以使用 texture
来获取采样点对应的立方体纹理像素(即颜色值):
vec3 uvw = vec3(0.5, 0.5, 0.5); // 假设要取样的点是一个立方体面的中心
vec4 pixelColor = texture(textureSampler, uvw);
// pixelColor 就是采样点对应的立方体纹理面的颜色值,可以进行后续处理