美文网首页OpenGL学习笔记
【五十二,多光源-02实现】

【五十二,多光源-02实现】

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

平行光

在片段着色器中定义一个函数计算平行光在对应的照射点上的光照颜色,这个函数需要几个参数:

  • 平行光
  • 发现
  • 观察者方向

封装平行光的定义

struct DirLight {
    vec3 direction;

    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
};  
uniform DirLight dirLight;

声明函数
vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir);

点光源

同样的,点光源的计算需要需要参数:

  • 点光源
  • 法线
  • 片段位置
  • 视觉方向

封装点光

struct PointLight {
    vec3 position;

    float constant;
    float linear;
    float quadratic;  

    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
};  
#define NR_POINT_LIGHTS 4  
uniform PointLight pointLights[NR_POINT_LIGHTS];

计算函数的声明
vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir);

平行光和点光的混合计算

把上面两个光源对物体的影像放在一起的计算,如下:

void main()
{
    // 一些属性
    vec3 norm = normalize(Normal);
    vec3 viewDir = normalize(viewPos - FragPos);

    // 第一步,计算平行光照
    vec3 result = CalcDirLight(dirLight, norm, viewDir);
    // 第二步,计算顶点光照
    for(int i = 0; i < NR_POINT_LIGHTS; i++)
        result += CalcPointLight(pointLights[i], norm, FragPos, viewDir);
    // 第三部,计算 Spot light
    //result += CalcSpotLight(spotLight, norm, FragPos, viewDir);

    color = vec4(result, 1.0);
}

运行效果

多光源运行效果

多光源代码

相关文章

  • 【五十二,多光源-02实现】

    平行光 在片段着色器中定义一个函数计算平行光在对应的照射点上的光照颜色,这个函数需要几个参数: 平行光 发现 观察...

  • LearnOpenGL 多光源

    我们在前面的教程中已经学习了许多关于OpenGL 光照的知识,其中包括冯氏照明模型(Phong shading)、...

  • 实时渲染、三种渲染方法介绍

    实时渲染,一般有三种渲染方法,多光源一次渲染,多光源多次渲染和延迟着色。 多光源一次渲染:对于每个物体,计算所有光...

  • URP多光源处理

    URP多光源处理 该节我们将实现在URP下接收多个光照 本系列URP不再阐述具体的效果实现逻辑与公式推导,侧重于U...

  • URP多光源阴影处理

    URP多光源阴影处理 本系列URP不再阐述具体的效果实现逻辑与公式推导,侧重于URP下对《Shader入门精要》中...

  • OpenGL ES for Android多光源

    在学习过光照,材质,投光物之后,现在我们把这些效果结合起来。我们显示这样的效果:在阳光照射下,有几个点光源,同时有...

  • OpenGL学习13——多光源

    多光源(Multiple Lights) 前面我们学习一些关于光照的知识,这一章节我们结合所获得的知识来创建一个包...

  • 第十二篇·中山经·合谷山

    原文: 又北五十二里,曰合谷之山,是多薝棘。 译文: 再往北五十二里,有一座合谷山,这里到处是薝棘。 再往北五十二...

  • OpenGL ES学习之路(8.1) 光照案例

    实现效果 实现目的 本案例主要实现绘制金字塔,并显示法向量位置和颜色和光源颜色 源码分析 首先新建OPenGL E...

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

    多光源 前几节学习了光照相关的知识: 冯氏光照模型(Phong shading) 光照材质(Materials) ...

网友评论

    本文标题:【五十二,多光源-02实现】

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