02 OpenGL 光照

前面代码:

https://files.cnblogs.com/files/zach0812/zcb202007121246.zip

颜色 Colors:

资料:https://learnopengl-cn.github.io/02%20Lighting/01%20Colors/

代码:

https://files.cnblogs.com/files/zach0812/zcb202007121515.zip

效果图:

光照基础 Basic Lighting:

  • 环境光照(Ambient Lighting):即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。为了模拟这个,我们会使用一个环境光照常量,它永远会给物体一些颜色。
  • 漫反射光照(Diffuse Lighting):模拟光源对物体的方向性影响(Directional Impact)。它是冯氏光照模型中视觉上最显著的分量。物体的某一部分越是正对着光源,它就会越亮。
  • 镜面光照(Specular Lighting):模拟有光泽物体上面出现的亮点。镜面光照的颜色相比于物体的颜色会更倾向于光的颜色。

漫反射光照:

图左上方有一个光源,它所发出的光线落在物体的一个片段上。我们需要测量这个光线是以什么角度接触到这个片段的。

如果光线垂直于物体表面,这束光对物体的影响会最大化,最亮。

如果光线平行于物体表面,这束光对物体的影响会最小,最暗。

如何计算光线对片段颜色的影响?

点乘(cosθ 关系)返回一个标量,我们可以用它。不同片段朝向光源的方向的不同,这些片段被照亮的情况也不同。

所以,

  • 法向量:一个垂直于顶点表面的向量。
  • 定向的光线:作为光源的位置与片段的位置之间向量差的方向向量。为了计算这个光线,我们需要光的位置向量和片段的位置向量。

代码:

https://files.cnblogs.com/files/zach0812/zcb202007181734.zip

镜面光照

Specular Highlight 高光反射

这里的和人眼就有关了,跟观察者的位置有关系,

Note : 漫反射是不关心人的眼睛的,高光反射是考虑人眼的,

最终计算还是 计算 橘色向量和 人眼的向量的点乘, 

具体的计算步骤是:

1,先用灯光向量和法向量产生橘色向量

2,然后用橘色向量和眼睛向量做点乘  

代码:

https://files.cnblogs.com/files/zach0812/zcb202007181815.zip

材质 Materials

参考文档: https://learnopengl-cn.github.io/02%20Lighting/03%20Materials/ 

代码01:

https://files.cnblogs.com/files/zach0812/zcb202007192234.zip

代码再次封装:

https://files.cnblogs.com/files/zach0812/zcb202007192303.zip

光照贴图Lighting Map

漫反射贴图(Diffuse Map):

https://files.cnblogs.com/files/zach0812/zcb202007211215.zip

镜面光贴图(Specular Map)

https://files.cnblogs.com/files/zach0812/zcb202007211232.zip

投光物 Lighting Caster:

我们目前使用的光照都来自于空间中的一个点。它能给我们不错的效果,但现实世界中,我们有很多种类的光照,每种的表现都不同。将光投射(Cast)到物体的光源叫做投光物(Light Caster)。在这一节中,我们将会讨论几种不同类型的投光物。学会模拟不同种类的光源是又一个能够进一步丰富场景的工具。

我们首先将会讨论定向光(Directional Light),接下来是点光源(Point Light),它是我们之前学习的光源的拓展,最后我们将会讨论聚光(Spotlight)

定向光:

https://files.cnblogs.com/files/zach0812/zcb202007232231.zip

点光源:

聚光:

原文地址:https://www.cnblogs.com/zach0812/p/13288020.html