gpt4 book ai didi

opengl - VBO 如何连接到 VAO

转载 作者:行者123 更新时间:2023-12-03 23:12:00 26 4
gpt4 key购买 nike

VAO 是顶点数组对象,VBO 是顶点缓冲区对象。创建和绑定(bind)/解除绑定(bind) VAO 和 VBO 的调用具有如下一般格式:

GLuint VAO, VBO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER,
sizeof(GLfloat)* 9,
vertices,
GL_STATIC_DRAW);
glVertexAttribPointer(0,
3, GL_FLOAT, GL_FALSE,
0, 0);
glEnableVertexAttribArray(0);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

我在互联网上关注了一些教程,他们说 VBO 绑定(bind)到 VAO,但是在上面的代码中,我不明白 VBO 和 VAO 之间的“连接”或“绑定(bind)”是如何建立的?我的意思是我们如何知道哪个 VBO 绑定(bind)到哪个 VAO 以及如果一个 VBO 绑定(bind)到多个 VAO 怎么办?

所以,基本问题是:VBO 绑定(bind)到 VAO 是什么意思,我们如何知道哪个 VBO 绑定(bind)到哪个 VAO 以及这个绑定(bind)是如何建立的?

最佳答案

how does a VBO get attached to a VAO



附于 glVertexAttribPointer叫做。

Vertex Array Objects 中规定的每个属性状态向量可能引用不同的 Vertex Buffer Object .此引用在 glVertexAttribPointer 时存储。叫做。
然后是当前绑定(bind)到目标的缓冲区 ARRAY_BUFFER与属性相关联,并且对象的名称(值)存储在 VAO 的状态向量中。 ARRAY_BUFFER binding 是一个全局状态。

这与 Index Buffer 的行为不同。 ( ELEMENT_ARRAY_BUFFER)。索引缓冲区绑定(bind)在顶点数组对象中声明。当缓冲区绑定(bind)到目标时 ELEMENT_ARRAY_BUFFER ,则此缓冲区与当前绑定(bind)的顶点数组对象相关联。

这意味着当您调用 glBindBuffer(GL_ARRAY_BUFFER, VBO); 时,然后设置存储 VBO 的全局状态. glVertexAttribPointer检索 VBO从全局状态并将其关联到 VAO .
glBindBuffer(GL_ARRAY_BUFFER, ...)再次调用,那么之前的绑定(bind)就丢失了,当然它不会改变 VAO 的任何状态。
glBindVertexArray(VAO);              # bind VAO (global state)

glBindBuffer(GL_ARRAY_BUFFER, VBO1); # bind VBO1 (global state)
glVertexAttribPointer(0, ...); # associate VBO1 to attribute 0 in VAO

glBindBuffer(GL_ARRAY_BUFFER, VBO2); # bind VBO2 (change global state, VBO1 binding is lost)
glVertexAttribPointer(1, ...); # associate VBO2 to attribute 1 in VAO

关于opengl - VBO 如何连接到 VAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59892088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com