1 为什么小草是绿的,物体的颜色是怎么出来的?
答:一个物体的颜色是由它反射得颜色决定的,小草吸收太阳光除绿色以外的颜色,并将绿色反射出来,所以看到是绿色的。假如用单一蓝光照射,那会是黑色。
2 如何创建一个光照场景?
答:再新建一个光照着色器就行了,将光源颜色和对象颜色作为输入变量传至光照着色器计算出输出变量。
3 冯氏光照模型是什么?
答:光照是非常复杂的,为了简化其操作,一般使用冯氏光照模型,它由环境(Ambient),漫反射(Diffuse),镜面(Specular)三个光照组成。
4 冯氏光照模型三个分量怎么计算出来的?
答:环境(Ambient)光照:比如太阳光跟远近角度无关,光照颜色乘以环境因子再乘环境颜色。
漫反射:比如手电筒光跟角度远近均有关系,法向量乘以定向的光线。散射光最终强度 = 材质反射系数 × 散射光强度 × max(cos(入射角),0)。
镜面光照:如果物体表面光滑照射到物体的光又会反射出来,形成一个亮点这就是镜面光照,计算方式也是物体的法向量乘以光的方向向量。镜面光最终强度 = 材质镜面亮度因子 × 镜面光强度 × max(cos(反射光向量与视线方向向量夹角),0)。
5 什么是光照贴图?
答:在加载纹理时,加入光照的元素。
6 平行光,点光源,聚光有什么特别,如何表示?
答:平行光,比如太阳光不会随着距离强度衰减但有方向,定义一个方向向量来模拟平行光。点光源,比如火把,它会朝所有方向发光但是会衰减,根据常量系数及强度计算衰减系数,因此要定义好衰减常量系数。聚光比如手电筒,它有方向且跟光照角度有关,因此要定义好光照方向及角度。
7 在多光源场景中,如何实现叠加?
答:定义一个单独的颜色为最终输出颜色,然后计算各个光源分量对这片段分贡献,叠加到最终输出颜色变量上。
8 在opengl中如何实现光照的?
答:并不是调用opengl光照相关的函数,而是操作一些方向向量和调节一些光照相关的参数就是实现不同光照场景。