Face Normals & Vertex Normals(面法线跟顶点法线的区别)——翻译

因为要计算normal,了解这两种法线是必不可少的。在网上看到一篇讲这两种normals的文章,但是是纯英文写的:
Face Normals & Vertex Normals(面法线跟顶点法线的区别)
这里把它翻译一下,也算是学习的过程,方便阅读。

正文

什么是面法线?

面法线是描述多边形所面对方向的向量(见图 1)
请添加图片描述

图 1:表面的面法线

什么是顶点法线?

顶点法线与面法线有一定的关系,在“如何计算面法线和顶点法线?”中讨论会讨论二者的关系。 有时我们可以将顶点法线设置为与面法线相同,但是使用面法线作为顶点法线在使用三角形近似曲面时会产生不平滑的结果。请添加图片描述

图2 面法线曲面近似结果

请添加图片描述

图3 顶点法线曲面近似结果

顶点法线的作用:
Direct3D 或 Opengl 需要知道顶点法线,用来确定光线照射到表面的角度,并且由于光照计算是针对每个顶点进行的,因此 Direct3D 或 Opengl 需要知道每个顶点的表面方向(法线)。

如何计算面法线和顶点法线?
对于立方体和球体等简单的物体,我们可以通过观察看到顶点法线。 对于更复杂的网格,我们需要更机械的方法。 假设一个三角形由顶点 po、p1 和 p2 组成,我们需要计算每个顶点 n0、n1 和 n2 的顶点法线。

首先计算位于三角形上的两个向量:

p1 - p0 = a
p2 - p0 = b

求得面法线:

n = a * b (* 是叉乘运算)

请添加图片描述
由于每个顶点法线与面法线相同:

n0 = n1 = n2 = n

找到顶点法线的更好方法是计算平均法线: 为了找到顶点 v 的顶点法线 vn,我们找到共享顶点 v 的网格中所有三角形的面法线。然后通过平均所有这些面法线给出 vn。 这里有一个例子来说明。 假设三个三角形,其面法线由 n0,n1 和 n2 给出,共享顶点 v。然后通过平均面部法线给出 vn:

vn = (n0 + n1 + n2) /3。

在转换阶段,顶点法线可能会变为非法线(啥意思?)。 因此,最好是在转换阶段之后重新归一化所有法线。

两种不同类型的顶点向量:
顶点法线可以与面法线相同(见图5)。当我们将顶点法线设置为与面法线相同时,一个蓝色立方体将如下图所示,当我们直接面对它时,每个面都有它的最大亮度。请添加图片描述

图5: 一个顶点有三个顶点法线

当我们将顶点法线设置为三个面法线的平均值时,当我们旋转立方体时,角度将具有最大亮度。请添加图片描述

图6: 一个顶点的顶点法线是三个面法线的平均值
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值