OpenGL中對(duì)VAO和VBO的理解
2023-05-07 22:51 作者:應(yīng)如是呀呀呀呀 | 我要投稿
在之前一次面試中被問到過VAO和VBO分別是什么,因?yàn)樽约簩W(xué)的不扎實(shí)導(dǎo)致沒答上來,最近重新開始復(fù)習(xí)OpenGL,查閱了許多教程后對(duì)VAO和VBO有了新的理解
首先VBO(Vertex Buffer Object)是被用來存放頂點(diǎn)(Vertices)數(shù)據(jù)的,因?yàn)橛?jì)算機(jī)在CPU與GPU通信時(shí)的消耗比較大,所以盡量把數(shù)據(jù)打包一起送往GPU,所以就可以用VBO來存放頂點(diǎn)數(shù)據(jù)然后傳遞給GPU
那么VAO是什么呢?

說實(shí)話我一開始被這張圖搞蒙了,以為VAO只是存放VBO索引值的地方
但通過總結(jié)其他教程,歸納出以下結(jié)論:
VAO中存放著對(duì)的VBO句柄,即 glBindBuffer(GL_ARRAY_BUFFER, VBO) 函數(shù)綁定的是哪個(gè)具體的VBO
VAO中存放著VBO的屬性,即glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0) 中保存綁定好的VBO的屬性屬性(例如第五個(gè)參數(shù)是步長(Stride)即連續(xù)頂點(diǎn)屬性組之間的間隔)
VAO中存放著對(duì)glEnableVertexAttribArray和glDisableVertexAttribArray的調(diào)用,當(dāng)VAO的值變成enable時(shí),Vertex Shader才可以讀取這些值
標(biāo)簽: