美文网首页OpenGL学习笔记
【五十一,多光源-01基础】

【五十一,多光源-01基础】

作者: Woodlouse | 来源:发表于2019-12-24 22:00 被阅读0次

    多光源

    前几节学习了光照相关的知识:

    • 冯氏光照模型(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);
    } 
    

    相关文章

      网友评论

        本文标题:【五十一,多光源-01基础】

        本文链接:https://www.haomeiwen.com/subject/xrtqoctx.html