step1. 在片段着色器中声明一个静态变量uniform作为光源位置:uniform vec3 lightPos,

step2. 在渲染循环中(渲染循环的外面也可以,因为它不会改变)更新uniform。

lightingShader.setVec3("lightPos", lightPos);

step3. 片段的位置

在世界空间中进行所有的光照计算,把顶点位置属性乘以模型矩阵(不是观察和投影矩阵)来把它变换到世界空间坐标。

step4. 顶点着色器

out vec3 FragPos;  //声明一个输出变量
out vec3 Normal;void main()
{gl_Position = projection * view * model * vec4(aPos, 1.0);FragPos = vec3(model * vec4(aPos, 1.0));Normal = aNormal;
}

step5. 在片段着色器中添加相应的输入变量。in vec3 FragPos;

a. 计算光源和片段位置之间的方向向量。

光的方向向量是光源位置向量与片段位置向量之间的向量差。应确保所有相关向量最后都转换为单位向量,所以我们把法线和最终的方向向量都进行标准化:

vec3 norm = normalize(Normal);
vec3 lightDir = normalize(lightPos - FragPos);

b. 对norm和lightDir向量进行点乘,计算光源对当前片段实际的漫发射影响。结果值再乘以光的颜色,得到漫反射分量。两个向量之间的角度越大,漫反射分量就会越小:

float diff = max(dot(norm, lightDir), 0.0);//如果两个向量之间的角度大于90度,点乘的结果就会变成负数
vec3 diffuse = diff * lightColor;

c. 合并环境光分量和漫反射分量(相加)

vec3 result = (ambient + diffuse) * objectColor;
FragColor = vec4(result, 1.0);

光照 (4) 漫反射光照相关推荐

  1. 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】

    ✅ 重点参考了 LearnOpenGL CN 的内容,但大部分知识内容,小编已作改写,以方便读者理解. 文章目录 零. 成果预览图 一. 光照原理与投光物的配置 1.1 光照原理 1.2 投光物 二. ...

  2. Q85:对比“直接光照”和“间接光照”的反射模型

    这里只是罗列"直接光照"和"间接光照"的反射模型的示意图.这一章节的作用主要是:联系之前学过的反射模型(漫反射模型.高光反射模型)和接下来将要学习的反射模型. ...

  3. Vulkan_Shader_Day02—光照(基础光照_Phong Lighting Model)

    基础光照 现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的.因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来 ...

  4. Lighting Window 光照设置界面 光照系列2

    Lighting Window 光照设置界面 本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>) 仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处. 文章中涉 ...

  5. 【OpenGL】二十二、OpenGL 光照效果 ( 模型准备 | 光照设置 | 启用光照 | 启用光源 | 设置光源位置 | 设置光照参数 | 设置环境光 | 设置反射材质 | 设置法线 )

    文章目录 一.模型准备 二.光照设置 1.启用光照设置 2.启用光源 3.设置光照参数 4.设置环境光 5.设置反射材质 三.光照法线设置 1.设置光源位置 2.设置法线 3.代码示例及运行效果 四. ...

  6. matlab光照补偿命令,光照补偿判别以及方法(转载)

    综合分析实验结果,可以得出如下结论: (1)一般的光照条件,对识别影响较小,无须在识别前先进行特殊的光照处理. (2)偏光严重的人脸图像,一般水平方向偏光对识别的影响比垂直方向偏光更大.在没有其他 ...

  7. unity 镜面反射_Unity | Diffuse Light漫反射光照

    Hello all 今天跟大家唠一下unity shader中的diffuse 是我木偶心没 我们在游戏开发的过程中光照是必不可少的,而为了使游戏更加真实,获得更好的体验,也会模拟因光照产生的各种镜面 ...

  8. [高级光照]球谐光照

    Spherical Harmonic Lighting(球谐光照) Robin Green 这篇文章只是Spherical Harmonic Lighting这个论文的解释,看的时候请参照原文,原文需 ...

  9. 【兰伯特光照与Blinn_Phong光照】

    <1>兰伯特与半兰伯特 Shader "Tang/614/Lambert"{Properties{_Color("Tin Color",Color) ...

  10. OpenGL光照教程之 光照贴图

    引言  前面的教程,我们讨论了让不同的物体拥有各自不同的材质并对光照做出不同的反应的方法.在一个光照场景中,让每个物体拥有和其他物体不同的外观很棒,但是这仍然不能对一个物体的图像输出提供足够多的灵活性 ...

最新文章

  1. 阿里2018营收2502亿元,云计算业务增幅超100%
  2. IBM已“弃疗”,AI医疗研发10年不赚钱,终于打算卖了
  3. Gartner:为什么元宇宙商业离我们还很遥远?
  4. oracle 只读同名词,Oracle创建只读用户,授予视图/同义词/会话权限
  5. unity天空盒渐变_「是日美好事物」野兽派带来“金色眼泪”治愈新香,LV耳机印上蓝色天空...
  6. 华为鸿蒙是多少纳米的,厉害!华为又一颗自研7纳米手机芯片曝光,鸿蒙系统或8月初发布...
  7. 2020 java swing jtable 合并_java学生管理系统(界面版)
  8. 【学习笔记】25、关系数据库存储
  9. 3.27模拟赛 sutoringu(后缀数组)
  10. ai背景合成_智能合成AI主播很危险,应立即取消!
  11. 中等职计算机应用基础,中等职业计算机应用基础答案
  12. 我发现了个 Python 黑魔法,执行任意代码都会自动念上一段「平安经」
  13. python读取txt每一行-Python逐行读取txt文本,按符合分割词并逐行写入txt
  14. C/C++ 笔试、面试题目大汇总收藏(上)
  15. windows黑客编程系列(二):DLL延迟加载和资源释放
  16. Taskctl的定时任务调度
  17. 通用对话框Dialog
  18. win10系统重装步骤详解
  19. 惊!用python将数据存到txt文件中发现顺序乱排或缺斤少两
  20. pyecharts饼图pie制作

热门文章

  1. 一个一本正经的科普--5G是什么?
  2. Html文本域介绍,html文本域标签属性有哪些?html文本域标签属性用法介绍
  3. UI设计需要使用哪些软件?推荐这5款
  4. 系统的可靠性分析与设计---可靠性的概述
  5. document.querySelector
  6. 关于菜鸟的圆通电子面单打印
  7. Veil-Evasion免杀
  8. Java基础梳理第二天03(继承、抽象类、多态)
  9. 收录国外造船信息-Pursuit of a product work breakdown structure (PWBS)
  10. Linux常用命令大全(非常全!!!)