一个VBO可以绑定多个vao
Can a VBO be bound to multiple VAOs?
我试图通过将其纹理坐标作为顶点位置数组来渲染模型的UV地图。我为渲染完美的模型设置了一个VAO,然后尝试添加第二个VAO并将纹理坐标缓冲区绑定到它。遗憾的是,它没有渲染任何东西。
我已经为UV地图编写了第二组顶点和片段着色器,编译得很好。缓冲区的绑定方式与模型VAO和顶点属性设置相同。我能看到的唯一区别是我没有重新指定缓冲区数据。
这是我设置模型VAO的代码:
// Create model VAO
glGenVertexArrays( 1, &modelVAO );
glBindVertexArray( modelVAO );
// Create position buffer
glGenBuffers( 1, &positionBuffer );
glBindBuffer( GL_ARRAY_BUFFER, positionBuffer );
glBufferData( GL_ARRAY_BUFFER, sizeof( GLfloat ) * vertexCount * 4, positions, GL_STATIC_DRAW );
glVertexAttribPointer( 0, 4, GL_FLOAT, GL_FALSE, 0, 0 );
glEnableVertexAttribArray( 0 );
// Create normal buffer
glGenBuffers( 1, &normalBuffer );
glBindBuffer( GL_ARRAY_BUFFER, normalBuffer );
glBufferData( GL_ARRAY_BUFFER, sizeof( GLfloat ) * vertexCount * 3, normals, GL_STATIC_DRAW );
glVertexAttribPointer( 1, 3, GL_FLOAT, GL_FALSE, 0, 0 );
glEnableVertexAttribArray( 1 );
// Create texture coordinate buffer
glGenBuffers( 1, &textureCoordinateBuffer );
glBindBuffer( GL_ARRAY_BUFFER, textureCoordinateBuffer );
glBufferData( GL_ARRAY_BUFFER, sizeof( GLfloat ) * vertexCount * 2, textureCoordinates, GL_DYNAMIC_DRAW );
glVertexAttribPointer( 2, 2, GL_FLOAT, GL_FALSE, 0, 0 );
glEnableVertexAttribArray( 2 );
// Unbind model VAO
glBindVertexArray( 0 );
然后我像这样设置UV贴图VAO:
// Create new UV map VAO
glGenVertexArrays( 1, &uvMapVAO );
glBindVertexArray( uvMapVAO );
// Bind texture coordinate buffer
glBindBuffer( GL_ARRAY_BUFFER, textureCoordinateBuffer );
glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, 0, 0 );
glEnableVertexAttribArray( 0 );
// Unbind UV map VAO
glBindVertexArray( 0 );
是否可以像这样将同一个VBO与多个VAO一起使用?
是。vao只是存储对vbo的引用,以及由glVertexAttribPointer指定的格式、偏移量等相关数据。索引vbo的语义略有不同。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- VBO必须在VAO之后绑定
- 为什么VAO可以使用VBO数据绑定它?
- 绑定到GL_ELEMENT_ARRAY_BUFFER,但未绑定VAO
- 何时为与VAO绑定的What
- vao如何知道哪些vbo/ibo被绑定到它?
- 绑定的VAO问题
- 一个VBO可以绑定多个vao
- 当使用IBO/EBO时,只有当我在创建VAO之后调用glBindBuffer来绑定IBO/EB0时,程序才能工作