美文网首页OpenGL
OpenGLES笔记五VAO,cube贴图

OpenGLES笔记五VAO,cube贴图

作者: 幻影快快跑 | 来源:发表于2018-06-21 16:14 被阅读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作为立体贴图的纹理句柄

    相关文章

      网友评论

        本文标题:OpenGLES笔记五VAO,cube贴图

        本文链接:https://www.haomeiwen.com/subject/sqcqyftx.html