看過(guò)好多VAO和VBO的解釋,大都模模糊糊,可能是因?yàn)槲冶容^笨吧,很簡(jiǎn)單的關(guān)聯(lián),我會(huì)用一個(gè)小例子幫助大家理解。
VBO(Vertex Buffer Object),我們繪制需要的頂點(diǎn)數(shù)據(jù),需要從cpu傳遞到gpu,這樣每次傳遞顯然很費(fèi)時(shí)間,從2.0開始,我們可以再gpu中開啟一塊保存數(shù)據(jù)的區(qū)域,減少傳遞的時(shí)間。
VAO(Vertex Array Object),當(dāng)我們需要繪制多個(gè)形狀的圖形時(shí),一個(gè)VBO為我們保存所有的數(shù)據(jù),VAO可以看做管理VBO的,需要時(shí)綁定對(duì)應(yīng)的VAO就可以繪制對(duì)應(yīng)的數(shù)據(jù)。



上面例子中,我畫了兩個(gè)長(zhǎng)方形,在每次使用VBO傳入著色器數(shù)據(jù)的時(shí)候,綁定VAO,那么在繪制的時(shí)候,每次綁定下VAO再繪制,效果如下

CubeMap立體貼圖
也叫立體貼圖,就好比一個(gè)正方體,用圖片把它包圍起來(lái),視角在里面看東西,就好像置身于場(chǎng)景中一樣。
立體貼圖是用6個(gè)正方形2D紋理拼接出來(lái)的,正常情況下,把正方體圖片展開,會(huì)得到下面的一張圖片,然后通過(guò)一定的順序?qū)⒚總€(gè)正方形圖片,從上到下拼接成一個(gè)長(zhǎng)圖,加載到GL_TEXTURE_CUBE_MAP中

我們進(jìn)入GL_TEXTURE_CUBE_MAP中,會(huì)看到很多枚舉的類型,重要的是下面這幾個(gè)
GL_TEXTURE_CUBE_MAP_POSITIVE_X
GL_TEXTURE_CUBE_MAP_NEGATIVE_X
GL_TEXTURE_CUBE_MAP_POSITIVE_Y
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
GL_TEXTURE_CUBE_MAP_POSITIVE_Z
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
這幾個(gè)就是圖片從上到下的順序,我們把上面圖片十字中間的圖片作為z軸的正方向,那么順序就是右、左、上、下、前、后,這里有個(gè)小的疑惑,在用GLKTextureLoader加載cube圖片的時(shí)候,方法cubeMapWithContentsOfFile說(shuō)圖片的順序是北、南、東、西、上、下,根本對(duì)應(yīng)不上。
使用時(shí)用GLKTextureLoader加載圖片
GLKTextureInfo *textureInfo = [GLKTextureLoader cubeMapWithContentsOfFile:path options:nil error:&error];
在片元著色器中使用samplerCube作為立體貼圖的紋理句柄
