8 OpenGL纹理和采样器

纹理和采样器 Textures and Samplers

纹理映射将一个或多个指定图像的部分映射到片元或顶点上。在着色器中,通过在指定的(s、t、r)纹理坐标位置采样图像的颜色来实现这种映射。纹理查找通常用于修改片元的RGBA颜色,但也可以用于着色器中的任何目的。

本章首先描述了如何在章节8.1-8.11中指定和查询像素矩形、纹理图像以及纹理和采样器对象参数。章节8.12-8.26中剩余的部分描述了着色器中如何执行纹理采样。

纹理的内部数据类型可以是有符号或无符号的规范化固定点、有符号或无符号的整数,或浮点数,这取决于纹理的内部格式。内部格式和内部数据类型之间的对应关系见表8.12-8.13。固定点和浮点纹理返回浮点值,整数纹理返回有符号或无符号整数值。片元着色器负责将纹理查找的结果解释为正确的数据类型,否则结果是未定义的。

每种支持的纹理类型都是由一维、二维或三维数组的纹素构成的纹理图像集合(参见章节2.6.6)。一维、二维和三维纹理分别由一维、二维或三维纹理图像组成。一维和二维数组纹理是由一维或二维图像组成的数组。每个图像由一个或多个层组成。二维多重采样和二维多重采样数组纹理是特殊的二维和二维数组纹理,每个纹素中包含多个样本。立方体贴图是特殊的二维数组纹理,其有六个表示立方体面的层。访问立方体贴图时,纹理坐标被投影到立方体的六个面之一上。立方体贴图数组是作为二维数组纹理存储的立方体贴图层集合。访问立方体贴图数组时,纹理坐标s、t和r类似于立方体贴图,而最后一个纹理坐标q被用作立方体贴图片段的索引。矩形纹理是特殊的二维纹理,仅包含单个图像,并使用非规范化坐标进行访问。缓冲区纹理是特殊的一维纹理,其纹理图像存储在单独的缓冲区对象中。

实现必须支持使用多个图像进行纹理处理。

以下各小节(直到第8.14节)指定了单个纹理的GL操作。可以像第11.1.3.5节描述的那样,由着色器对多个纹理图像进行采样和组合。

片元着色器中用于纹理的坐标由OpenGL着色语言规范定义。

命令

void glActiveTexture( enum texture );

指定活动纹理单元选择器。可以通过调用GetIntegerv,并将pname设置为ACTIVE_TEXTURE来查询选择器。

每个纹理图像单元由章节8中定义的所有纹理状态组成。活动纹理单元选择器选择由涉及纹理图像处理的命令访问的纹理图像单元。这些命令包括TexParameter、TexImage、BindTexture以及所有这些状态的查询。

活动纹理图像单元选择器所需的状态是一个整数。初始值为TEXTURE0。

你可能感兴趣的:(OpenGL,图形渲染)