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 就是采样点对应的立方体纹理面的颜色值,可以进行后续处理