【五十一,多光源-01基础】
2019-12-24 本文已影响0人
Woodlouse
多光源
前几节学习了光照相关的知识:
- 冯氏光照模型(Phong shading)
- 光照材质(Materials)
- 光照图(Lighting maps)
- 投光物(Light casters)
在多光源中,要创建一个包含六个光源的场景:
- 一个类似阳光的平行光(Directional light)
- 4个定点光(Point lights)
- 一个手电筒(Flashlight)
要在场景中使用多光源需要封装一些GLSL函数用来计算光照,GLSL中的函数与C语言的相似,它需要:
- 函数名
- 返回值类型
- 在调用前提前声明
多光源计算的一帮方式
创建一个输出颜色的向量,每个光源都对输出颜色贡献一些颜色,场景中的每个光源进行独立运算,并且运算结果都对最终的输出颜色有一定影响,函数的一般结构如下:
out vec4 color;
void main()
{
// 定义输出颜色
vec3 output;
// 将平行光的运算结果颜色添加到输出颜色
output += someFunctionToCalculateDirectionalLight();
// 同样,将定点光的运算结果颜色添加到输出颜色
for(int i = 0; i < nr_of_point_lights; i++)
output += someFunctionToCalculatePointLight();
// 添加其他光源的计算结果颜色(如投射光)
output += someFunctionToCalculateSpotLight();
color = vec4(output, 1.0);
}