Opengl 添加到GLuint属性索引做什么?

Opengl 添加到GLuint属性索引做什么?,opengl,mobile,virtual-reality,oculus,Opengl,Mobile,Virtual Reality,Oculus,我目前正在阅读一些代码,特别是Oculus Mobile SDK的示例代码,它只是渲染一些彩色立方体,在着色器中检索带有glGetAttribLocation的顶点着色器属性,这是一个mat4,这是变换矩阵,然后再往下一点,他做了一些事情,添加到着色器属性索引中 VertexTransformAttribute=GLGetAttriblLocation Program.Program,VertexTransform; //有些事情发生在两者之间 对于int i=0;i

我目前正在阅读一些代码,特别是Oculus Mobile SDK的示例代码,它只是渲染一些彩色立方体,在着色器中检索带有glGetAttribLocation的顶点着色器属性,这是一个mat4,这是变换矩阵,然后再往下一点,他做了一些事情,添加到着色器属性索引中

VertexTransformAttribute=GLGetAttriblLocation Program.Program,VertexTransform; //有些事情发生在两者之间 对于int i=0;i<4;i++ { GL GlenableVertexAttribute数组VertextFormatAttribute+i; GL GLVERTExattribute指针VertexTransformAttribute+i,4,GL_浮点, false,4*4*sizeof float,void*i*4*sizeof float; glVertexAttribute除数VertextFormatAttribute+i,1; } 在某种程度上,我理解他正在对所有立方体的变换矩阵做一些事情,但我不确定添加到索引中做了什么


任何解释此部分的帮助都将不胜感激

每个顶点属性都向OpenGL提供4个值,即使您没有全部使用这4个值。但在GLSL中,您可以使用。由于这些变量包含4个以上的值,因此尽管只声明了一个实际变量,但仍需要1个以上的属性来传递数据


因此,输入变量名称的属性位置是第一个属性索引。OpenGL会自动连续分配下一个X属性索引,以满足对变量的请求。对于mat4,这是一个4x4矩阵。所以OpenGL总共需要为它分配4个属性,每个属性代表矩阵的一列。这些都是按顺序分配的,从与变量名关联的属性索引开始,到后面的3个属性索引结束。

要展开,本例中具体发生的是,示例编写器将通常表示为每个渲染对象的mat4的模型转换推送到缓冲区中,因此,随后它们都可以通过对实例调用的单个调用来呈现。有关更多详细信息,请参阅,包括作者执行类似操作但不使用循环的部分。