当前课程知识点:移动图形概论 >  第六章 光源与光照 >  6.1 光照的基本概念 >  光照的基本概念

返回《移动图形概论》慕课在线视频课程列表

光照的基本概念在线视频

下一节:光源模型

返回《移动图形概论》慕课在线视频列表

光照的基本概念课程教案、知识点、字幕

同学们大家好

今天的课要给大家介绍一下照明

今天的主要内容

包括OpenGL ES中照明的基本概念

定向光源和点光源等模型的介绍

特别介绍漫反射照明的编程方法

在现实世界中

如果没有照明

那么一切都是黑暗的

而在我们前面的部分示例代码中

例如08号示例代码

我们没有考虑照明

依然可以看到三角形的颜色

只是无论三角形如何旋转

看上去颜色都一样

这与现实世界是有差别的

因此

如果适当的考虑照明

会增加物体显示的真实感

在OpenGL中

有关照明的计算

都需要通过评估有多少光会落到对象的特定面上来完成

而这个计算通常要使用对象的法线方向

计算照明时

必须确保使用正确的位置坐标和法线方向

只有当所有位置都位于同一坐标系统中时

才可以进行照明计算

而只要保持一致

使用哪个空间都可以

视图空间最符合用户看到或者感受到的情形

使用起来最方便

因此

一般计算照明都在视图空间进行

使用视图空间还有一个好处

即相机或眼睛位于原点处

视线的方向就是位置的坐标矢量

我们首先看一下漫反射的情况

漫反射光分量

表示被对象的材料反射的散射光

如这个图片展示的

同等强度的光

当倾斜照射时

覆盖的面积要大一些

平均下来单位面积获得的光就会少

因此看起来就会暗一些

用数学的方式来表达

就是计算光在法线方向上的投影

这可以使用点乘运算实现

也就是

模型表面的明亮度=光强矢量和法线矢量的点乘

注意

这里的两个矢量都是单位矢量

因此获得的明亮度是小于等于1的值

12号示例代码使用定向光源来演示漫反射的情况

定向光源很简单

因为指明了光源的方向

无需计算该方向

不过

这将导致照射到平面表面的光量是相同的

该照明模型

可以用来代表遥远的光源

例如太阳光的照射

这里是12号例程中顶点着色器的代码

并不完整

只保留了相关的部分

这里的输入

有顶点的法线信息inNormal

还有两个统一变量MVITMatrix

是用来进行法线变换的矩阵

LightDirection是传入的光线方向

在代码中

所有的计算

必须在统一的坐标系统中进行

我们这里使用了视图空间

首先

利用传入的法线变换矩阵计算了视图空间的法线方向transNormal

注意

这里矩阵的变量名MV

分别代表模型和视图空间变换

IT代表了逆转置

然后用dot函数计算transNormal和光线方向的点乘

注意这里传入的光线方向是指向光源的矢量

因此这里计算的时候加了负号

另外由于亮度不能是负值

这里还使用max函数

保证

计算的结果最小是0.0

传递到片段着色器的亮度数值

是对每个片段插值获得的

如果使用纹理

就可以用亮度值与查找的纹理数据相乘作为片段的最终颜色

注意

这里的纹理坐标使用texture_or_color属性变量的gb分量

对于不使用纹理的情况

就用亮度值与颜色值相乘

由于传入的颜色数据只有3维

这里补充1.0作为Alpha通道的值

运行这个示例程序

可以注意到随着模型的旋转

模型表面的亮度也会变化

这里可以留意立方体的几个表面

顶面由于与光线的角度始终不变

因此亮度也没有变化

除了前面介绍的定向光源模型

常见的模型还有点光源

点光源将向所有方向均匀辐射光强

因此

需要为对象上的每个点计算光源的方向

在视图空间

可以用光源的位置坐标与要计算的点的坐标相减

获得光源方向矢量

点光源照明模型一般用来建模近距离光源

例如灯泡的照明

另外一种常见的光源模型是聚光灯模型

聚光灯光源将采用与点光源相似的方式辐射光

但它的方向范围有限

它也是一种近距离的光源模型

例如

手持手电筒的照明

在给聚光灯光源模型建模的时候需要设定三个参数

一是光源的位置坐标

二是光源的方向向量S_dir

三是光源扩散的截至角S_angle

对于图中v点的光源方向向量L

与点光源的情况类似

可以用它的坐标和光源坐标相减获得

通过L的反向向量-L

与S_dir的点积

可以获得出射光线与S_dir的夹角

这样就可以判断其是否在出射光的光锥内

一般情况下

聚光灯光源的光强不是均匀的

S_dir方向的光强最大

随着与S_dir夹角增大

光强曾指数规律衰减

好 今天的课程就到这里

谢谢大家

移动图形概论课程列表:

第一章 课程简介

-1.1 课程基本情况介绍

--课程基本情况介绍

-1.2 GPU 相关基础知识

--GPU 相关基础知识

-1.3 OpenGL ES 技术发展历史

--OpenGL ES 技术发展历史

-1.4 PowerVR SDK 安装和使用

--PowerVR SDK 安装和使用

-第一章测试

第二章 图形编程入门

-2.1 OpenGL ES 基本概念

--OpenGL ES 基本概念

-2.2 编写第一个图形程序

--编写第一个图形程序

-2.3 主要 API 介绍

--主要 API 介绍

-第二章测试

第三章 OpenGL ES 变换

-3.1 矢量和矩阵知识基础

--矢量和矩阵知识基础

-3.2 旋转与位移变换

--旋转与位移变换

-3.3 OpenGL ES 变换基础

--OpenGL ES 变换基础

-第三章测试

第四章 OpenGL ES 着色器

-4.1 着色器编程语言介绍

--着色器编程语言语法

--着色器编程语言特殊语法

-4.2 着色器编程实例

--着色器编程实例

-第四章测试

第五章 颜色与纹理

-5.1 颜色的基本概念

--颜色的基本概念

-5.2 纹理素材的使用

--纹理素材的使用

-5.3 立方体纹理

--立方体纹理

-第五章测试

第六章 光源与光照

-6.1 光照的基本概念

--光照的基本概念

-6.2 光源模型

--光源模型

-6.3 使用着色器渲染颜色

--使用着色器渲染颜色

-6.4 反射与折射

--反射与折射

-第六章测试

第七章 基于物理的渲染

-7.1 基于物理渲染的基本概念

--基于物理渲染的基本概念

-7.2 基于图像的照明

--基于图像的照明

-7.3 PBR 的实现

--PBR 的实现

-第七章测试

第八章 PowerVR 工具简介

-8.1 Vulkan 介绍

--Vulkan 介绍

-8.2 SDK 中的实用工具介绍

--SDK 中的实用工具介绍

-综合测试

光照的基本概念笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。