天空盒
先展示一个效果图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7qGzsyy-1594654641142)(static/天空盒.png)]](https://i-blog.csdnimg.cn/blog_migrate/4bed9cbb49210b83dbfdfc888f282c39.png#pic_center)
多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。
简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你可能会奇怪,这样一个立方体有什么用途呢?为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的纹理呢?立方体贴图有一个非常有用的特性,它可以通过一个方向向量来进行索引/采样。假设我们有一个1x1x1的单位立方体,方向向量的原点位于它的中心。使用一个橘黄色的方向向量来从立方体贴图上采样一个纹理值会像是这样:

立方体贴图创建
unsigned int textureID;
glGenTextures(1, &textureID);
//GL_TEXTURE_CUBE_MAP 注意参数
glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);
//和OpenGL的很多枚举(Enum)一样,它们背后的int值是线性递增的,所以如果我们有一个纹理位置的数组或者vector,我们就可以从GL_TEXTURE_CUB

本文是关于OpenGL的学习笔记,重点介绍了如何使用立方体贴图创建天空盒,以及在片段着色器中实现反射和折射效果。通过立方体贴图,可以模拟无限空间的天空背景。文章讨论了优化天空盒渲染的技巧,如利用提前深度测试提高效率,并解释了如何欺骗深度缓冲以确保天空盒始终位于其他物体后面。此外,还展示了反射和折射的实现代码。
最低0.47元/天 解锁文章
2548

被折叠的 条评论
为什么被折叠?



