webgl 光照

2021-09-06  本文已影响0人  Viewwei

光源的类型

光主要分为两大类型:平行光和点光源.平行光类似太阳光.点光源类似人造灯.此外还用环境光来模拟真实世界的非直射光(也就是由光源发出后经过墙壁或者其他物体反射后的光)

反射类型

物体向哪个方向反射光,反射光的延时是什么?取决以下两个因素:入射光和物体表面的类型.入射光的信息包括入射光的颜色和方向,而物体表面信息包括表面的固有颜色和反射特性.
物体表面反射光线的方式有两种:漫反射和环境反射

漫反射

漫反射是针对平行光或者点光源而言的.漫反射的反射光在各个方向是均匀的,


image.png

在漫反射中,反射光的颜色取决于入射光的颜色 表面的基底色 入射光与表面形成的入射角.我们将入射角定义为入射光与表面的法向量形成的夹角.
<漫反射光颜色> = <入射光颜色> X<表面基底色> x cosø

环境反射

环境反射是针对环境光而言的.在环境反射中,反射光的方向认为就是入射光的反方向.由于环境关照射物体的方式就是各方向均匀,强度相等,所以反射光也是各个方向均匀
<环境反射光颜色>= <入射光颜色>x<表面基底色>


image.png

当漫反射和环境发射同时存在时,将两者加起来,就会得到最终被观察到的颜色
<表面的反射光颜色> = <蛮反射光颜色>x<环境反射光颜色>

平行光下的漫反射

漫反射的反射光其颜色与光在入射光在入射角ø有关.平行光入射产生的漫反射的颜色比较好计算.漫反射反射关颜色
<漫反射光颜色> = <入射光颜色> x<表面基底色> x cosø
在 3D 建模的时候,我们并不会直接给出入射角是多少,我们必须根据入射光的方向和物体表面的朝向来计算入射角.在 3D 建模的时候,我们可以确定每个表面的朝向,子啊指定光源的时候,在确定光的方向,根据这两个矢量的点积,来计算两个矢量的夹角余弦.点击运算已经内置在 GLSL ES 中了(dot)
cosø = <光线方向>点积<法向量>
因漫反射公式可以写成
<漫反射光颜色> =<入射光颜色> x <表面基底色> x (<光线方向>点积<法向量>)
这里需要注意的:其一 光线方向矢量和表面法向量矢量长度必须为 1,否则反射光的颜色就会过暗或者过亮.将一个矢量长度调整为 1,同时保证方向不变的过程叫做归一化.其二,这里所谓的光方向,实际上是入射方向的反方向.


image.png
法线:表面的朝向

物体表面的朝向,即垂直于表面的方向.又称为法线或者法向量
.平面的法向量是唯一的,与位置无光

运动物体的关照效果

坐标的变换引起法向量的变化

魔法矩阵

对顶点进行变换的矩阵称为模型矩阵.对于如何计算变换之后的法向量?我们只需要将变换之前的法向量乘以模型矩阵的逆转矩阵即可.逆矩阵的含义是,如果矩阵 M 的逆矩阵的 R,那么 RM或者 MR 都是单位矩阵
TREE 封装了两个方法对矩阵进行操作
Matrix4*setInverseof(m) 使自身称为逆矩阵
Matrix4.transpose:对自身进行逆矩阵

上一篇下一篇

猜你喜欢

热点阅读