喂养顶点着色器从缓冲区从缓冲区给材质输入数据

  

周一到周五,每天一篇,北京时间早上7点准时更新~

  在第二章

,“我们第一轮的OpenGL程序。”你简要介绍了顶点数组对象(农村村民)。在讨论中,我们解释了农村村民代表输入的顶点shader-though当时,我们没有使用任何实际输入顶点着色器和选择而不是硬编码的数据数组。然后,在第三章我们介绍了顶点属性的概念,但我们只讨论如何改变他们的静态值。尽管这些静态顶点数组对象存储属性值,它可以做更多的事。在我们继续之前,我们需要创建一个顶点数组对象来存储顶点数组状态,并将其绑定到我们的环境,所以我们可以使用它:

  

在第二章中,我们已经接触过农村村民了,在那里,我们已经解释过农村村民如何给材质输入数据了,虽然那时候我们没有真的使用农村村民而是使用了硬编码的数据。在第三章,我们介绍了顶点属性的概念,但我们仅仅是讨论了如何改变他们静态的值.VAO不仅可以为你存储那些静态属性,它还可以做更多事情。在我们开始之前,我们需要创建一个农村村民的对象去存储我们顶点数组的状态,并且把它绑定到我们的上下文中,这样我们才能使用它

  

GLuint农村村民;
glCreateVertexArrays(1,和农村村民);
glBindVertexArray(农村村民);
现在我们农村村民创建并绑定,我们可以开始填写它的状态。而不是使用顶点着色器中硬编码的数据,我们可以完全依赖一个顶点属性的值,问OpenGL填补它自动使用存储在缓冲区中的数据对象,我们供应。每个顶点属性可以从缓冲区获取数据绑定到一个顶点缓冲区绑定。设置绑定一个顶点属性用来引用一个缓冲区,称之为glVertexArrayAttribBinding()函数:

  

现在我们创建了农村村民了,我们可以干大事了。这次我们使用缓冲区对象提供数据而不是使用硬编码。每个顶点属性都需要从缓冲区对象绑定到的节点上去获取数据。为了让顶点属性知道自己去哪里缓冲区的那个节点上拿数据,我们调用glVertexArrayAttribBinding去设置

  

空白glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
glVertexArrayAttribBinding()函数告诉OpenGL,顶点数组对象命名vaobj绑定时,顶点属性在指定的索引attribindex应该源在bindingindex缓冲区的数据绑定。告诉OpenGL缓冲区对象数据的缓冲区对象数据驻留在,我们使用glVertexArrayVertexBuffer()函数来绑定一个缓冲区的顶点缓冲绑定。我们使用glVertexArrayAttribFormat()函数来描述数据的布局和格式,最后我们启用自动填充属性通过调用glEnableVertexAttribArray ()。glVertexArrayVertexBuffer的原型()

  

这个函数就告诉OpenGL,当vaobj这个农村村民被绑定到上下文的时候,在attribindex上的顶点属性去缓冲区的那个bindingindex上拿数据。为了告知OpenGL数据在哪个缓冲区里以及数据在那个缓冲区里的内存格局,我们使用glVertexArrayVertexBuffer去设置这些。我们使用glVertexArrayAttribFormat去描述数据的格式,也就是内存分布啦。不清楚内存分布的同学可以看看我们的c++技巧课程,不讲c++基础语法,只通过一些小的例子来加深对c++的理解。并且最终,我们调用glEnableVertexAttribArray函数去启动让OpenGL自动的去把缓冲区里的数据按照设置的模式发送给着色器处理.glVertexArrayVertexBuffer的函数如下:

  

空白glVertexArrayVertexBuffer (GLuint vaobj,
GLuint bindingindex,
GLuint缓冲区,
GLintptr抵消,
GLsizei步幅);
,第一个参数是你修改顶点数组对象的状态。bindingindex,第二个参数是顶点的索引缓冲区,它匹配的参数发送到glVertexArrayAttribBinding ()。缓冲区参数指定缓冲区对象的名称我们绑定。最后两个参数,抵消和步幅,告诉OpenGL缓冲对象属性数据所在。抵消说第一个顶点的数据开始和步说每个顶点之间的差距有多远。都是以字节。接下来,我们有glVertexArrayAttribFormat(),其原型是

  

这里,第一个参数是农村村民,第二个参数是缓冲区对象的索引,这个索引与glVertexArrayAttribBinding里面设置的那个一一对应。第三个参数是缓冲区对象。最后俩参数偏移和步幅告诉OpenGL这些数据的内存格局,抵消告诉OpenGL数据的起始位置,跨步告诉OpenGL同一个属性之间的数据间隔,大小都是字节。

  

空白glVertexArrayAttribFormat (GLuint vaobj,
GLuint attribindex,
闪烁大小,
GLenum类型,
GLboolean正常化,
GLuint relativeoffset);为glVertexArrayAttribFormat
(),第一个参数是我们修改再次顶点数组的状态。attribindex是顶点的索引属性。您可以定义一个大量的属性作为输入一个顶点着色器,然后把它们的指数作为解释在第三章“顶点属性”一节。大小的组件数量为每个顶点缓冲区中存储数据的类型和类型,这通常是一种表5.3 .

喂养顶点着色器从缓冲区从缓冲区给材质输入数据