立方体贴图纹理与菲涅尔反射效果(Fresnel reflection)简介
环境映射
光滑物体表面的鏡面反射效果及投射效果可以极大提升渲染场景的真实性。然而,为了正确模拟这类效果,需要用到光线追踪等非常耗时的方法。由于影响渲染物体的外在因素只有周围的远景,我们可以直接使用周围环境的远景贴图来实现这种效果。这种方法称为环境映射,一般分为贴在球体上的球形映射(Sphere maping),和贴在立方体上的立方体映射(Cube maping)。下图为立方体贴图纹理示例。
在OpenGL中
GL_TEXTURE_CUBE_MAP
用于声明立方体贴图纹理类型,用以下的设定,可以自动生成立方体贴图纹理用的贴图坐标。
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
上述代码指定生成坐标模式为 GL_REFLECTION_MAP 。
下文使用GLSL计算反射折射向量,然后参照立方体贴图纹理实现反射折射效果。
计算反射方向向量
通过以下公式计算反射向量

计算反射向量的shader代码如下.
1 2 3 4 5 6 |
|