11.1 OpenGL可编程顶点处理:顶点着色器

顶点着色器 Vertex Shaders

顶点属性(Vertex Attributes)

在图形编程中,尤其是在OpenGL等图形API中,顶点属性(Vertex Attributes)是图形管线处理过程中用于描述每个顶点特征的数据。这些数据通过绘制命令从应用程序传递给图形处理器,并与顶点着色器中的命名属性变量绑定。

  1. 属性绑定

    • 顶点着色器可以通过location限定符(在GLSL源码中)或SPIR-V着色器的Location装饰指定属性变量到通用顶点属性索引的绑定。
    • 应用程序也可以在程序链接前使用BindAttribLocation函数明确指定绑定关系。
  2. 数据类型和组件布局

    • 根据表11.3中列举的标量或向量数据类型声明的属性变量,当其绑定到通用属性索引i时,它的值将来自通用属性i的相应组件。使用的通用属性组件取决于变量的类型以及声明中可能指定的组件布局限定符(参照表11.1)。
    • 当矩阵类型的属性变量绑定到通用属性索引i时,其值会来自从i开始连续的通用属性。这样的矩阵被视为一列列向量数组,其中向量的值按照表11.2所示的方式由相应的通用属性成分提供。
    • 数组类型的属性变量绑定到通用属性索引i时,活跃的数组元素会被分配到从i开始的连续通用属性上,分配的属性数量和每个元素的组件数根据数组元素的数据类型及其声明中可能指定的组件布局限定符决定。
  3. 64位双精度类型

    • 对于表11.3中列出的64位双精度类型,如果顶点属性变量的值指定的组件少于该变量所需的组件数量,则不会提供默认值。例如,若一个dvec4类型的变量第四分量通过VertexAttribL3dv或其他只指定三个分量的方法来指定,则该分量将是未定义的。
  4. 自动绑定

    • 如果在链接程序时,有活动的属性没有通过BindAttribLocation、着色器文本内显式设置或SPIR-V二进制代码直接指定绑定,则图形系统(如OpenGL)会自动为这些属性分配通用顶点属性。已分配的绑定可通过GetAttribLocation函数查询。
  5. 链接限制

    • 在链接程序时,如果分配的绑定会导致引用不存在的通用属性(即大于或等于MAX_VERTEX_ATTRIBS的索引),或者对于需要连续多个通用属性的矩阵属性或多维数组属性没有足够的空间进行分配,那么链接操作将会失败。
  6. SPIR-V 着色器和 BindAttribLocation

    • 对于SPIR-V着色器,由于SPIR-V规范要求位置必须在着色器文本内部完全指定,因此BindAttribLocation函数对其无效。在SPIR-V着色器中,属性的位置必须按照特定章节的规定明确设置。如果同时在SPIR-V着色器内部和通过BindAttribLocation设置了不同的绑定,将以SPIR-V着色器内部的设置为准。
Data type component layout qualifier Components used
scalar 0 or unspecified x
scalar 1 y
scalar 2 z
scalar 3 w
two-component vector 0 or unspecified (x, y)
two-component vector 1 (y, z)
two-component vector 2 (z, w)
three-component vector 0 or unspecified (x, y, z)
three-component vector 1 (y, z, w)
four-component vector 0 or unspecified (x, y, z, w)

table 11.1:属性变量访问的通用属性组件

Data type Column vector type layout qualifier Generic attributes used
mat2, dmat2 two-component vector i, i + 1
mat2x3, dmat2x3 three-component vector i, i + 1
mat2x4, dmat2x4 four-component vector i, i + 1
mat3x2, dmat3x2 two-component vector i, i + 1, i + 2
mat3, dmat3 three-component vector i, i + 1, i + 2
mat3x4, dmat3x4 four-component vector i, i + 1, i + 2
mat4x2, dmat4x2 two-component vector i, i + 1, i + 2, i + 3
mat4x3, dmat4x3 three-component vector i, i + 1, i + 2, i + 3
mat4, dmat4 four-component vector i, i + 1, i + 2, i + 3

table 11.2: 绑定到通用属性索引i的矩阵变量的列向量所使用的通用属性和向量类型

Data type Command
int VertexAttribI1i
ivec2 VertexAttribI2i
ivec3 VertexAttribI3i
ivec4 VertexAttribI4i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值