当前课程知识点:移动图形概论 >  第六章 光源与光照 >  6.4 反射与折射 >  反射与折射

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

反射与折射在线视频

下一节:基于物理渲染的基本概念

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

反射与折射课程教案、知识点、字幕

各位同学大家好

今天要给大家介绍

图形渲染中的反射和折射

今天的主要内容包括

对镜面反射的建模

也就是反射现象

还有对透明介质的建模

对应折射光的计算

反射也就是镜面反射

与我们前边讨论过的高光不同

这里是纯粹的镜面反射

也就是说要对镜子的表面进行建模

物理世界中

玻璃和金属都有镜面反射的特质

是非常常见的材料

在数学上表示反射

可以用入射矢量

相对于入射点的法线方向

改变自己的方向

在屏幕上的例子中

向量e是入射光

r是出射光

它们相对于法向矢量n的夹角

都是θ

这是几何光学中的基本的反射定理

根据刚才介绍的反射原理

从相机到物体顶点的向量e

是视线向量

n是顶点的法线

这样可以得到反射向量r

由于完全的镜面反射

相机中从这个顶点处看到的颜色

就是向量r所指的方向看到的颜色

而这正好可以和立方体纹理相对应

根据反射向量r

就可以将其

用作立方体贴图的3D纹理坐标

在屏幕上展示的示意图中

r矢量照射3D纹理的负x面

图中用红色方块表示

利用这种计算方法

我们就可以在物体对应的顶点

渲染出环境的反射效果了

我们来看一下具体的着色器代码

这里是顶点着色器的例子

输入的属性有顶点的位置和法线

统一变量包括

模型 视图 投射 矩阵

mvp matrix

模型视图矩阵mv matrix

模型视图逆转置矩阵mvit matrix

输出变量只有用来做3D纹理坐标的

反射向量reflect dir

顶点位置

照常通过模型视图投射矩阵变换到场景中

回顾法线变换的知识

法线通过模型视图逆转置矩阵

进行变换

以确保法线方向正确

然后用normalize进行了归一化

接着通过使用模型 视图矩阵

变换顶点位置

这样可使所有的计算都在视图空间

也就是相机空间中

因为相机位于原点处

这个向量同时也是视线向量

最后在视图空间下

根据法线方向

计算反射的视线向量

然后将其发送到片段着色器

在片段着色器获取3D纹理

并进行照明的后续计算

回顾一下这里用到了

着射器程序函数

reflect

它用于计算入射向量l

绕法线向量n的反射向量

其中法线向量n

必须为单位长度

这也是前面代码中

使用normalize原因

片段着色器的代码就比较简单了

它的输入有立方体贴图3D纹理

cubemap

还有来自片段着色器的反射向量

reflect dir

具体代码只有使用

texture cube函数

利用反射向量计算此片段的颜色

在16号示例程序中

片段着色器的编写

与前面的代码有些不同

首先有关反射的计算

都在视线空间进行

光照的计算则在视图空间进行

在光照中反射部分

叠加了反射和高光两个分量

而在其他的部分

还加入了光线衰减的因素

算是综合了前面介绍的全部知识

下面看一下运行的效果

可以看到三角形在旋转过程中

高光点的移动

反射面转过来之后

可以看到除了反射了周围的环境

还加入了高光

而且高光的面积

明显要小于非镜面表面的高光面积

代码中通过增加额外的幂指数计算

来获得这个效果

折射是指光线经一种物质

进入另一种物质时

发生偏折的现象

物理的概念大家应该都比较熟悉

用向量来表示

就是图中展示的

入射向量e

相对于分界面的法向量n

进行折射

根据设定的折射率

得到折射向量r

我们这里使用的折射率是相对折射率

可以根据两种材料的折射率比值

计算得出

例如光从空气进入玻璃

那么折射率为

1.0除以1.52为0.658

计算完折射向量r后

就可以将其用作

立方体贴图的3D纹理坐标

按照与反射相同的方式

对物体的表面进行渲染

这里列出了

计算折射的顶点着色器代码

与前面的事例相比

这里增加reflect dir变量

作为折射方向矢量

reflect dir的计算

使用了reflect函数

使用空气到玻璃的折射率

0.658计算反射方向

再来回顾一下

着色器程序中

reflect函数的定义

给定入射向量l

法线向量n

和相对折射率θ

使用这个函数

可以获取折射向量

其中法线向量n

也同样必须为单位长度

与之对应的片段着色器程序

和反射情况的基本相同

只是输入的变量名

变成了折射向量

好 今天的课程就到这里

谢谢

移动图形概论课程列表:

第一章 课程简介

-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 中的实用工具介绍

-综合测试

反射与折射笔记与讨论

也许你还感兴趣的课程:

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