首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是法向量、正切向量和二法线向量,它们是如何使用的?

什么是法向量、正切向量和二法线向量,它们是如何使用的?
EN

Game Development用户
提问于 2013-03-20 14:31:39
回答 4查看 66.4K关注 0票数 59

我想知道以下资料:

  • 他们是什么?
  • 游戏开发中的示例用法(它们使用的区域)

关于以下向量类型:

  • Normal
  • Tangent
  • Binormal

简单的以游戏开发为中心的解释就足够了。

EN

回答 4

Game Development用户

回答已采纳

发布于 2013-03-20 15:01:35

一般说来,法线向量表示直接“向外”指向一个曲面的方向,这意味着它是正交的(在90度角度上)任何向量与平面共面(在平坦曲面的情况下)或与给定点的曲面相切(在非平面的情况下)。

切线向量通常被认为是存在于曲面平面内的向量(对于平面而言),或者是与曲面上的参考点相切的向量。如果从参考点用相同的法线构造平面,则切线向量将与该平面共面)。

二法向量的概念比较复杂,在计算机图形学中,它一般是指二值向量(reference 这里),它实际上是曲面的“其他”切线向量,它与法向量和选定的切线向量都是正交的。

关于它们是如何计算的,这取决于曲面的复杂性和你希望法线的精确程度(在某些情况下,例如光滑着色,当一个曲面的实际信息不存在时,计算近似曲面的法线更可取),但是有几个给出这里的广义公式。

就它们的发生地点而言,答案无处不在。法向量用于在三维空间中定位摄像机和物体,确定物理计算中的轨迹、反射和角度,将皮肤和纹理映射到三维模型,确定AI编程中的目标轨迹偏移,向着色器提供关于如何在表面上相对于光线、摄像机和其他物体的光照、阴影和颜色点的提示,等等。它们可能是3D环境中最有用的信息之一,甚至在2D环境中也非常有用。

票数 58
EN

Game Development用户

发布于 2013-03-20 15:01:52

法向量通常用于照明计算。它是一个向量,它应该垂直于表面,由网格的顶点近似。法线是在每个点阵位置定义的,但可以根据你想要的光线在那个点阵处折射的方式或者你想在阴影中用你的光线计算做什么来计算。

切线向量和二法向量是相互垂直的向量,法向量主要描述u,v纹理坐标相对于你试图渲染的曲面的方向。通常,它们可以与普通地图一起使用,这样你就可以为你的模型创建地下照明细节(颠簸)。

显然还有其他方法来利用这些向量,我刚才描述了它们的平均使用情况。关于更多的技术信息,我建议你拿起一本关于计算机图形学的书,或者在互联网上浏览一些文章。关于这件事有很多信息。

票数 19
EN

Game Development用户

发布于 2020-05-15 21:14:38

我知道这是旧的,但我想补充一点实用的信息。正如其他人所说的,但更具体地说是与图形化编程有关。

  1. 法线aka (曲面法)是正交的平面,我们的三角形曲面。(从上面突出出来)
  2. 切线可以被认为是位于该平面(其共面)上的一个法线,通常这是从网格上的一个四边形中选择的(因此,两个三角形的一侧形成一个正方形),它通常被应用到两个三角形上,作为两个或所有四边形顶点的切线,这取决于它的精确程度。
  3. 双切线或称双正态分布或称为共切.平面上的向量可以给出方向的概念,但是,一个完整的矩阵是由三个单位长度的向量组成的,用来描述一个方向。BiTangent是通过交叉乘积计算的,因为它具有正交或垂直(在90度)与法向和正切的性质。(实际上,每一个都是垂直于其他适当的,因此知道任何两个给对方一个交叉乘积)
  4. 所有这些向量,法向量、正切向量和双切线向量,通常都是单位长度,表示它们在图形编程中被规范化。
  5. 在这些向量上执行交叉乘积时必须小心,以确保所需的缠绕顺序被理解,无论您是在定义它还是坚持其他人的网格或模型缠绕顺序(他们的意图)。说十字(A,B)是交叉(B,A)的相反,这样方向就会相反。(这可能导致,如果放置在矩阵中,就会导致错误轴中的转换矩阵和或定义不当的矩阵)。
  6. 所述双切线通常在gpu上计算,或通过预先计算存储在网格或模型的顶点数据中。

与4x4矩阵的实用关系。

通常,正如您可能知道的,一个常用的右手4x4矩阵有3个向量,表示向前、向上和右边。放置在矩阵中的这三个单位长度向量等于一个完整的定向矩阵。(例如,矩阵可能与这些向量类似,尽管据我所知,这不是标准化的,m.Forward =法线,m.Up =切线,m.Right =双切线)。

这就形成了一个方向,表示它形成了一个正交矩阵,每个向量与其他向量垂直,每个维x,y,z都有一个向量。

当另一个矩阵通常是一个旋转矩阵被应用到它(曲面在图形情况下是三角形)时,描述该曲面的方向将是.正确地旋转。

然后遍历屏幕上的一个三角形,在2d情况下。

代码语言:javascript
运行
复制
x = x + 1;

这样我们就可以直接在三维物体表面上移动。(尽管简化了,您可以看到,即使矩阵m是旋转的,下面公式的前提也是成立的)

代码语言:javascript
运行
复制
x = x + m.Right; 

实际使用。

当复杂的旋转被应用到一个曲面上,例如纹理映射,如果你有所有的这三个值,那么无论曲面旋转到什么方向,它总是向前、向上和正确的。纹理uv位置可以从这或如果你喜欢它的切线和双切线矢量在表面的三角形可以移动从一个三角形顶点。在三维空间和2d空间中一样容易。有了这些信息,您可以从3d到2d屏幕空间,或者反之亦然,当您需要或如果您需要为各种可能的需要。

具体应用

最常见的例子是法向映射或Bump映射的图形技术,它使平面看起来具有深度,您可以查阅该术语以获得更多信息。

票数 8
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/51399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档