簡體   English   中英

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 );

可以像這樣使用多個VAO的相同VBO嗎?

是的 VAO只存儲對VBO的引用,以及glVertexAttribPointer指定的格式,偏移等相關數據。 索引VBO的語義略有不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM