细说图形渲染管线——法线变换

法线变换

法向量是垂直于物体表面的单位向量,在图形渲染管线种,我们需要将物体变换到世界坐标系下,那么法向量是否也需要变换到世界坐标系呢? 基本正确,但是不是一个简单的模型矩阵就能搞定的。
首先,法向量只是一个方向向量,不能表达空间中的特定位置,同时,法向量没有齐次坐标,这里意味着,位移不应该影响到法向量。因此,如果我们打算把法向量乘以一个模型矩阵,我们就要从矩阵中移除位移部分,只选用模型矩阵左上角3×3的矩阵(注意,我们也可以把法向量的w分量设置为0,再乘以4×4矩阵;这同样可以移除位移)。对于法向量,我们只希望对它实施缩放和旋转变换。
其次,如果模型实行了不等比缩放,顶点的改变会导致法向量不垂直于物体表面了。
在这里插入图片描述
我们需要专门的法线变换矩阵来解决上述问题。

Normal = mat3(transpose(inverse(model))) * aNormal;

先说结论,法线变换是模型变换的逆矩阵的转置

法线变换矩阵推导

下图是均匀缩放后的法线图
在这里插入图片描述
非均匀缩放的时候,其实法线方向应该还是垂直于物体表面
在这里插入图片描述
我们假设三角形斜面的顶点是P1, P2。

T=P2-P1

我们将一个向量写成齐次坐标的方式,那么w分量为0.那么,我们可以写出以下等式:

T * ModelView =(P2-P1)* ModelView;

那么,可以得出:

T * ModelView =P2 * ModelView - P1 * ModelView;
T' = P2' -P1'

我们这里假设P2’和P1’是变换后的三角形的顶点,这里我们认为T’(T)是三角形的切线空间。不管怎么变换,TN=0.现在假设有一个33的矩阵G是法线变换的矩阵,那么

N'.T' = (GN) .MT = 0

可以得出:

GNMT = 0
NT = 0

在NT中间插入I(单位矩阵)
在这里插入图片描述
在这里插入图片描述
那么可以得出:
在这里插入图片描述

可以解出
在这里插入图片描述

参考文献:
https://learnopengl.com/Lighting/Basic-Lighting
http://www.lighthouse3d.com/tutorials/glsl-12-tutorial/the-normal-matrix/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值