天空盒的思想就是绘制一个大的立方体,然后将观察者放在立方体的中心,当相机移动时,这个立方体也跟着相机一起移动,这样相机就永远不会运动到场景的边缘。这与我们真实世界中的情况一样的,我们可以看见远处的天空接触到了地平线,但是不论我们怎么朝着那个方向移动,都不可能到达那个地方。
而天空盒可以说是Cube Mapping的典型应用。Cube Mapping,翻译成中文为立方体映射。实际上,Cube Mapping是用六张纹理图片作为立方体的六个面来进行纹理映射的。六张纹理图分别在OpenGL中被定义为POSITIVE_X POSITIVE_Y POSITIVE_Z NEGATIVE_X NEGATIVE_Y NEGATIVE_Z。
在之前讨论过的二维纹理映射中,我们只需要通过二维纹理坐标就可以确定该像素的颜色值。而在Cube Mapping中,纹理采样器会将一个三维的纹理坐标看成一个向量,首先确定这个向量处于立方体的哪个平面上,然后再在这个平面上获取相应的纹理值。
下面给出获取一个向量{x,y,z}对应的Cube Mapping映射的具体步骤
1.首先向量中绝对值最大的那一维。举例,{-9.0,4.5,2.25}我们将选取第一维的值-9.0. 然后我们需要根据绝对值最大的维度确定向量映射的表面。根据x=-9.0