在加入光照之前,先重构一下以前的工程。具体如下:
1. 在CMakeLists.txt中用环境变量读取glsdk的位置
2. 茶壶的数据放到一个公共的目录,并在程序中用宏来获取
3. 程序中shader的目录也用宏来获取,该宏在CMakeLists.txt设置
下面讨论一下光照的问题:
为了方便编程,没有将光源的信息,材质的信息通过uniform传入shader,而是在shader中直接指定。
1. 平行光:这种最简单,速度也最快。原理就是光线与顶点法线的夹角决定了反射光的强度。
2. 点光源:这种除了考虑夹角,还需要考虑距离引起的衰减(attenuation)。attenuation采用了一个关于距离的2次函数
3. SpotLight: 这种光源需要考虑距离,法线夹角,以及到中心线的距离(用着色点到灯光位置的向量与光线的夹角表示)。