OpenGLES笔记五VAO,cube贴图
看过好多VAO和VBO的解释,大都模模糊糊,可能是因为我比较笨吧,很简单的关联,我会用一个小例子帮助大家理解。
VBO(Vertex Buffer Object),我们绘制需要的顶点数据,需要从cpu传递到gpu,这样每次传递显然很费时间,从2.0开始,我们可以再gpu中开启一块保存数据的区域,减少传递的时间。
VAO(Vertex Array Object),当我们需要绘制多个形状的图形时,一个VBO为我们保存所有的数据,VAO可以看做管理VBO的,需要时绑定对应的VAO就可以绘制对应的数据。
![](https://img.haomeiwen.com/i2216667/3c3060d5d1dc60c9.png)
![](https://img.haomeiwen.com/i2216667/25a95f9dc9f1ac74.png)
![](https://img.haomeiwen.com/i2216667/347f72d5bb7d9f98.png)
上面例子中,我画了两个长方形,在每次使用VBO传入着色器数据的时候,绑定VAO,那么在绘制的时候,每次绑定下VAO再绘制,效果如下
![](https://img.haomeiwen.com/i2216667/81309367c0c9d13d.png)
CubeMap立体贴图
也叫立体贴图,就好比一个正方体,用图片把它包围起来,视角在里面看东西,就好像置身于场景中一样。
立体贴图是用6个正方形2D纹理拼接出来的,正常情况下,把正方体图片展开,会得到下面的一张图片,然后通过一定的顺序将每个正方形图片,从上到下拼接成一个长图,加载到GL_TEXTURE_CUBE_MAP中
![](https://img.haomeiwen.com/i2216667/188efd7ce16d4432.png)
我们进入GL_TEXTURE_CUBE_MAP中,会看到很多枚举的类型,重要的是下面这几个
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
这几个就是图片从上到下的顺序,我们把上面图片十字中间的图片作为z轴的正方向,那么顺序就是右、左、上、下、前、后,这里有个小的疑惑,在用GLKTextureLoader加载cube图片的时候,方法cubeMapWithContentsOfFile说图片的顺序是北、南、东、西、上、下,根本对应不上。
使用时用GLKTextureLoader加载图片
GLKTextureInfo *textureInfo = [GLKTextureLoader cubeMapWithContentsOfFile:path options:nil error:&error];
在片元着色器中使用samplerCube作为立体贴图的纹理句柄
![](https://img.haomeiwen.com/i2216667/f190b2e20172c313.png)