零基础学习OpenGL(八)--立方体贴图、天空盒、环境映射

                                                                                    立方体贴图

       将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。
       立方体贴图:一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。之所以使用6个纹理合并在一张纹理而不使用6个单独的纹理,是因为可以通过一个方向向量来进行索引或采样。方向向量的原点在立方体的中心。方向向量的大小并不重要,只要提供了方向,OpenGL就会获取方向向量(最终)所击中的纹素,并返回对应的采样纹理值。

        创建立方体贴图:

         unsigned int textureID;

         glGenTextures(1, &textureID);

         glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);

        立方体贴图包含有6个纹理,每个面一个,将纹理目标(target)参数设置为立方体贴图的一个特定的面,告诉OpenGL我们在对立方体贴图的哪一个面创建纹理。和OpenGL的很多枚举(Enum)一样,它们背后的int值是线性递增的。如下图:

          int width, height, nrChannels;

          unsigned char *data;

          for(unsigned int i = 0; i < textures_faces.size(); i++)

          {

                  data = stbi_load(textures_faces[i].c_str(), &width, &height, &nrChannels, 0);

                  glTexImage2D( GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data );

           }

         textures_faces的vector,它包含了立方体贴图所需的所有纹理路径,并以表中的顺序排列。这将为当前绑定的立方体贴图中的每个面生成一个纹理。

          也需要设定它的环绕和过滤方式:

          glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

          glTexParameteri(GL_TEXTURE_CUBE_MAP, GL

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值