OpenGL

OpenGLES笔记五VAO,cube贴图

2018-06-21  本文已影响18人  幻影快快跑

看过好多VAO和VBO的解释,大都模模糊糊,可能是因为我比较笨吧,很简单的关联,我会用一个小例子帮助大家理解。

VBO(Vertex Buffer Object),我们绘制需要的顶点数据,需要从cpu传递到gpu,这样每次传递显然很费时间,从2.0开始,我们可以再gpu中开启一块保存数据的区域,减少传递的时间。

VAO(Vertex Array Object),当我们需要绘制多个形状的图形时,一个VBO为我们保存所有的数据,VAO可以看做管理VBO的,需要时绑定对应的VAO就可以绘制对应的数据。

上面例子中,我画了两个长方形,在每次使用VBO传入着色器数据的时候,绑定VAO,那么在绘制的时候,每次绑定下VAO再绘制,效果如下

CubeMap立体贴图

也叫立体贴图,就好比一个正方体,用图片把它包围起来,视角在里面看东西,就好像置身于场景中一样。

立体贴图是用6个正方形2D纹理拼接出来的,正常情况下,把正方体图片展开,会得到下面的一张图片,然后通过一定的顺序将每个正方形图片,从上到下拼接成一个长图,加载到GL_TEXTURE_CUBE_MAP中

我们进入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作为立体贴图的纹理句柄

上一篇下一篇

猜你喜欢

热点阅读