Name

glVertexAttrib — 指定顶点属性值

C Specification

void glVertexAttrib1f( GLuint index,
  GLfloat v0);
 
void glVertexAttrib2f( GLuint index,
  GLfloat v0,
  GLfloat v1);
 
void glVertexAttrib3f( GLuint index,
  GLfloat v0,
  GLfloat v1,
  GLfloat v2);
 
void glVertexAttrib4f( GLuint index,
  GLfloat v0,
  GLfloat v1,
  GLfloat v2,
  GLfloat v3);
 

Parameters

index

指定要修改的顶点属性的索引

v0v1v2v3

指定新的值,用于被指定的顶点属性

C Specification

void glVertexAttrib1fv( GLuint index,
  const GLfloat *v);
 
void glVertexAttrib2fv( GLuint index,
  const GLfloat *v);
 
void glVertexAttrib3fv( GLuint index,
  const GLfloat *v);
 
void glVertexAttrib4fv( GLuint index,
  const GLfloat *v);
 

Parameters

index

指定要修改的顶点属性的索引

v

指定指向包含一系列值的数组的指针,用于被指定的顶点属性

Description

glVertexAttrib 入口函数家族允许程序以编号位置方式传递顶点数组属性。

属性值被定义为4个组件数值并存入数组中。数组的第一个入口编号为0,数组的大小由依赖于GL实现的符号常量GL_MAX_VERTEX_ATTRIBS来指定。数组中的每个元素可以由函数glVertexAttrib来改变,调用时,指定元素的索引,以及索引对应的值。

这些调用命令可以用来指定索引为 index的顶点属性的1个、2个、3个或者所有组件。函数名中的A1表示只有一个值被传递,它会被用来修改顶点属性中的第一个组件,第二、第三个组件会被置为0,第四个组件会被置为1。同理,函数名中的A2有两个值被传递并用来修改第一第二个组件,第三组件被置为0,第四组件被置为1。函数名中的A3有三个值被传递并用来修改前三个组件,第四组件被置为1,A4意味着修改所有组件。

字母f意味着所有参数都是float类型。如果后面紧接字母v,那么使用数组来传递数据。

OpenGLES着色语言属性变量允许类型为mat2,mat3,mat4。这些类型的属性可以用函数 glVertexAttrib加载。矩阵必须被以列主顺序加载入连续的属性插槽中,矩阵中的每一列插入一个数组插槽中。

顶点着色器中声明的用户定义属性变量可以调用函数glBindAttribLocation绑定至属性索引。这允许程序使用顶点着色器的已描述变量名。后续对指定的顶点属性的改变将被立即映射至对相应的顶点着色器中的属性变量的修改。

顶点属性索引和顶点着色器中的用户定义属性变量之间的绑定是程序对象状态的一部分,但当前顶点属性的值不是。每个顶点属性的值是当前状态的一部分并且是被维护着的(即使使用了不同程序对象)。

程序可以自由地修改未被绑定至已命名顶点着色器属性变量的顶点属性。这些值只是被当做当前状态的一部分而被维护,且不会被顶点着色器访问。如果顶点着色器执行时,绑定至顶点着色器中的属性变量的顶点属性未被更新,那么顶点着色器将对顶点属性重复地使用当前值。

Notes

程序可以将多个属性名绑定至同一个顶点属性索引。这就是我们说的别名,这行为只在以下情况中被允许:

当顶点着色器中只有一个属性变量的别名被激活时;

当顶点无路径通过着色器(no path through the vertex shader)比有多个属性别名指向相同位置更消耗资源时。

OpenGL实现并未被要求进行别名检测,实现是被允许假定别名不会出现,且被允许优化工作只在没有别名的情况下进行。

Errors

GL_INVALID_VALUE 错误: index 大于等于 GL_MAX_VERTEX_ATTRIBS.

Associated Gets

glGet 传入参数 GL_CURRENT_PROGRAM

glGetActiveAttrib 传入参数 program 和活动属性变量的索引

glGetAttribLocation 传入参数 program 和 一个属性变量名

glGetVertexAttrib 传入参数 GL_CURRENT_VERTEX_ATTRIB 和 index

评论模块尚未加载