2法线向量——精选推荐

平面法线(face normal)是描述多边形所朝方向的单位向量(即,它与多边形上的所有点相互垂直),如图7.4a所示。表面法线(surface normal)是与物体表面上的点的正切平面(tangent plane)相互垂直的单位向量,如图7.4b所示。表面法线确定了表面上的点“面对”的方向。
图7.4(a)平面法线与平面上的所有点相互垂直。(b)表面法线与物体表面上的点的正切平面相
互垂直。
装配平台当进行光照计算时,我们必须为三角形网格表面上的每个点求解表面法线,以确定光线与网格表面在该点位置上的入射角度。为了获得表面法线,我们必须为每个顶点指定表面法线(这些法线称为顶点法线)。然后在光栅化阶段,这些顶点法线会在三角形表面上进行线性插值,使三角形表面上的每个点都获得一个表面法线(回顾5.10.3节并参见图7.5)。
图7.5p0和p1是线段的两个顶点,n0和n1是对应的顶点法线。点p是通过线性插值(加权平均值)得到的线段上的一点,n是点p的法线向量,它介于两个顶点法线之间。也就是,当存在一个位置使p =p0 + t (p1–p0 )时,n =n0 +t(n1–n0)。为了简单起见,我们只解释了线段的法线插值,但是一概念可以被直接扩展为3D三角形的法线插值。
注意:对每个像素的法线进行插值,并进行光照计算称为逐像素光照或phong光照。还有一种负担较轻,但不够精确的方法是对每个顶点进行光照运算,称为逐顶点光照,计算结果是从顶点着器中输
出的,在像素着器中进行插值。将计算从像素着器转移到顶点着
器是一种常见的性能优化措施,而且在很多情况下的视觉表现与逐像素光照差别不大。
7.2.1 计算法线向量
为了求解一个三角形Δp 0p 1p 2的平面法线,我们必须先计算该三角形边上的两个向量: u =p 1−p 0
v = p 2−p 0
ip网络电话系统然后求得平面法线为:
⨯=⨯u v n u v
下面的函数可以根据三角形的3个顶点来计算三角形正面(参见5.10.2节)的平面法线。
对于一个微分曲面来说,我们可以使用微积分计算曲面上的点的法线。但遗憾的是,三角形网格不是微分曲面。我们通常使用一种称为顶点法线平均值(vertex  normal  averaging ) 的技术求解三角形网格上的顶点法线。对于网格上的任意顶点v 来说,v 的顶点法线n 等于以v 为共享顶点的每个多边形的平面法线的平均值。例如在图7.6中,网格上的四个多边形共享顶点v ;所以,v 的顶点法线为:
01230123
avg +++=+++n n n n n n n n n
图7.6中间的顶点由相邻的4个多边形共享,我们通过计算这4个多边形平面法线的平均值自动粉墙机
就可以估算出该顶点的法线。民宿管理系统
在上面的例子中,我们不需要除以4,因为我们想要的是一个普通平均值,我们可以对结果进行规范
化。注意,我们还可以构造更巧妙的平均值计算公式;例如,以每个多边形的
面积作为权值,计算加权平均值(这样,面积较大的多边形会占有较大的权重,而面积较小的多边形会占有较小的权重)。
下面的伪代码说明了在给出一个三角形网格的顶点列表和索引列表时,如何计算该平均值:
微安表nbva7.2.2 对法线向量进行变换
在图7.7a中,正切向量u = v1−v0垂直于法线向量n。当我们对这两个向量应用一个不成比例的缩放变换A时,我们可以从图7.7b中看到,变换之后的切线向量uA= v1A–v0A 不再垂直于变换之后的法线向量nA。
图7.7(a)变换之前的表面法线。(b)当x轴上的单位长度增大两倍后,法线不再垂直于表面。
(c)通过计算缩放变换的逆转置矩阵,我们可以得到正确的变换结果。
所以我们的问题是:当给出一个用于变换点和(非法线)向量的变换矩阵A时,如何求出一个专门用来变换法线向量的变换矩阵B,使变换之后的切线向量和法线向量依然保持垂直关系(即uA·uB =0)。要解决一问题,让我们先从一些已知条件开始:我们知道法线
这样,使用B= (A)(A的逆转置矩阵)来变换法线向量,就可以使它与变换之后的切线向量依然保持垂直关系。
注意,当变换矩阵为正交矩阵(A T =A-1)时,B = (A-1)T = (A T)T = A;也就是,我们不必计算逆转置矩阵,直接用A来代替B即可。总之,当以一个非等比变换矩阵对法线向量进行变换时,我们必须使用该矩阵的逆转置矩阵。
因为逆转置只用于变换矢量,而平移是作用在点上的,因此需要从矩阵中排除平移因素。但是,3.2.1节告诉我们,为了防止矢量被平移操作影响,它的w应设置为0(使用齐次坐标)。因此,我们无须将矩阵中的平移行归零。但问题是,如果我们将逆转置矩阵和另一个不包含非等比例缩放的矩阵相乘,例如视矩阵(A-1-)T V,转置后位于(A-1)T第4列的平移项导致结果错误。所以,我们将平移项清零就是为了预防这个错误。正确的方法是使用((A V)-1)T 对法线进行变换。下面是一个缩放和平移矩阵的例子,第4列经过逆转置后并不是[0,0,0,1]T:
100000.500000.501111⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭
A  110010202()00220001T --⎛⎫ ⎪- ⎪= ⎪- ⎪⎝⎭
A  注意:即使使用逆转置变换,法线向量也有可能会失去单位长度;所以,在变换之后必须重新规范化法线向量。

本文发布于:2024-09-22 02:07:37,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/251543.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:法线   顶点   变换   矩阵   向量   表面   计算
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议