shader学习-数学与光照

本文探讨3D数学中的光照计算,包括入射光方向的定义,如何根据单位向量计算光照强度,以及在图形学中如何进行背面剔除。同时,讲解了高光反射的概念,通过反射向量和Blinn-Phong模型简化高光计算过程。
摘要由CSDN通过智能技术生成

3D数学与光照

光的方向
在物理里,常用黄色箭头描述光的入射, ∠ θ ∠\theta θ即为入射角
但在模型计算光照时,光照入射向量会被统一到原点,和法向量的夹角变成 180 ° − ∠ θ 180°-∠\theta 180°θ,不符要求
在这里插入图片描述

所以使用从顶点指向光源的向量为入射光
c o s ( α ) = v 1 ⃗ ⋅ v 2 ⃗ ∣ v 1 ⃗ ∣ ∣ v 2 ⃗ ∣ cos(\alpha)=\frac{\vec{v_1} \cdot \vec{v_2}}{|\vec{v_1}||\vec{v_2}|} cos(α)=v1 v2 v1 v2 可知,当 α ≥ 90 ° \alpha\geq90° α90°时, v 1 ⃗ ⋅ v 2 ⃗ ≤ 0 \vec{v_1} \cdot \vec{v_2}\leq0 v1 v2 0,此时不受光照影响
再令 v 1 ⃗ 和 v 2 ⃗ \vec{v_1} 和\vec{v_2} v1 v2 转化为单位向量,此时 1 ≥ c o s ( α ) = v 1 ⃗ ⋅ v 2 ⃗ ≥ 0 1\geq cos(\alpha)=\vec{v_1} \cdot \vec{v_2}\geq0 1cos(α)=v1 v2 0。入射角越小,光照越强烈<=>cosα值越大,

从向量叉积的左手螺旋法则可知,需要构建正确的法向量需要顺时针旋转的两个向量
如果从一个三角面来看,如果以点A为原点,v1和v2需要顺时针旋转,则点B和点C也需要顺时针方向,所以构建边的顺序需要为AB,AC
在这里插入图片描述

背面剔除
如图所示,当法向量和相机向量角度大于等于90°时,无论平面受不受光照影响,都不显示。即背面剔除
在这里插入图片描述

高光反射
如图所示,当光的反射向量和摄像机的方向向量方向相近时,高光强烈
在这里插入图片描述

计算反射向量:
让L向量从顶点出发。并且N、L都为单位向量
L ⃗ + R ⃗ = 2 C o s ( ∠ N L ) ∗ N ⃗ = 2 L ⃗ ⋅ R ⃗ ∗ N ⃗ \vec L+\vec R=2Cos(∠NL)*\vec N=2\vec L\cdot \vec R*\vec N L +R =2Cos(NL)N =2L R N
R ⃗ = 2 L ⃗ ⋅ R ⃗ ∗ N ⃗ − L ⃗ \vec R=2\vec L\cdot \vec R*\vec N-\vec L R =2L R N L

在这里插入图片描述

BlinnPhone高光
由于普通的高光需要计算两次点积,使用BlinnPhone可以减少一次点积运算
使用光向量加摄像机向量得到半角向量H
H和N越近,高光越强
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值