shader中法线向量为什么要乘以模型视图矩阵的逆转置矩阵

在图形渲染中,法线向量需要转换到眼睛坐标系,但不能直接使用模型视图矩阵。文章探讨了顶点与法线向量的区别,指出观察矩阵缩放时对法线的影响,以及为何需要使用模型视图矩阵的逆转置。通过对矩阵运算的分析,展示了如何保持法线与切线的垂直关系,强调在正交矩阵(如旋转和平移)情况下,法线变换的特殊性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

许多计算都在眼睛坐标系中完成,一个常用的就是光照需要在这个空间中实现,因为眼睛位置决定了光照效果,否则的话,很难实现镜面光。因此我们需要将法线坐标转换到眼睛坐标系中。在OpenGL ES 2.0中,将一个顶点转换至眼睛坐标系中,通过:

vertexEyeSpace = view_Matrix * rm_vertex;

那为什么我们不能像法线向量一样做同样的工作呢?首先法线向量是3个floats的向量,而modelView矩阵是4X4的矩阵。这可以通过以下代码来实现:

normalEyeSpace = vec3(view_Matrix * vec4(rm_Normal, 0.0));

它只可用于一些环境中,不能用于所有,但是上面存在一个潜在的问题:

首先看看顶点和法线向量的区别是什么:

    顶点是(x,y,z)表示缺省的向量(x,y,z,1);而法线向量是一个方向性向量,没有固定的点。因为法线向量可由法线上两个固定顶点(x1,y1,z1,1), (x2,y2,z2,1)相减得到。因此,从这点就可以看到顶点与法线向量不同,也就造成了不现的变换。法线向量只能保证方向性的一致,不能保证位置性的一致。

潜在的问题是:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值