当前位置:嗨网首页>书籍在线阅读

08-补充说明

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

补充说明

正如我们在第5章中第一次研究纹理时的情况一样,使用SOIL2使得构建立方体贴图和为立方体贴图添加纹理变得容易。同时它也可能会有一些副作用,即阻挡用户学习一些有用的OpenGL细节内容。当然,用户也可以在没有SOIL2的情况下实例化并加载OpenGL立方体贴图。虽然该主题超出了本书的范围,但基本步骤如下:

(1)使用C++工具读取6个图像文件(它们必须是正方形);

(2)使用glGenTextures()为立方体贴图创建纹理及其整型引用;

(3)调用glBindTexture(),指定纹理的ID和GL_TEXTURE_CUBE_MAP;

(4)使用glTexStorage2D()指定立方体贴图的存储需求;

(5)调用glTexImage2D()或glTexSubImage2D()将图像分配给立方体的各个面。

更多有关在没有SOIL2的情况下创建OpenGL立方体贴图的详细信息,请浏览互联网上的一些相关教程[dV14], [GE16]

如本章所述,环境贴图的主要限制之一是它只能构建反射立方体贴图内容的对象。在场景中渲染的其他对象并不会出现在使用贴图模拟反射的对象中。这种限制是否可以接受取决于场景的性质。如果场景中存在必须出现在镜面或铬制对象中的对象,则必须使用其他方法。一种常见的方法是使用模板缓冲区(在第8章中有提到),许多网络教程(例如[OV12][NE14][GR16])中都有描述,不过它超出了本书的范围。

我们没有介绍天空穹顶的实现,虽然它们在某些方面可以说比天空盒更简单,并且不易受到失真的影响,甚至用它实现环境贴图也更简单——至少在数学上——但OpenGL对立方体贴图的支持常常使得天空盒更加实用。

在书后面部分涵盖的主题中,天空盒和天幕在概念上可以说是最简单的。然而,让它们看起来令人信服可能会耗费大量时间。我们只简要介绍了可能出现的一些问题(例如接缝),但根据使用的纹理图像文件,可能会出现其他问题,需要额外修复。尤其是在动画场景中或相机可以通过交互进行移动时。

我们还大致介绍了如何生成可用且令人信服的纹理立方体贴图图像。这方面有许多优秀的工具,其中最受欢迎的是Terragen [TE16]。本章中的所有立方体贴图均由作者使用Terragen制作(图9.6中的星域图除外)。