65.9K
CodeProject 正在变化。 阅读更多。
Home

3D游戏数学入门4:向量的运算

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2012年12月30日

CPOL

5分钟阅读

viewsIcon

10546

3D游戏数学入门4:向量的运算

在3D游戏环境中,向量用于保存点或顶点的值。因此,一个向量将包含一个坐标[x, y, z],它表示3D空间中的特定顶点。点之所以由向量定义,是因为向量的起始位置通常取为[0, 0, 0],即坐标空间的原点。因此,3D模型和游戏元素中的所有顶点都由向量表示,但重要的是要记住,向量不是3D顶点。(还有一种向量由4个坐标[x, y, z, w]表示,它们是齐次坐标。我们将在以后专门针对这个非常重要和有趣的话题的帖子中讨论这个问题)。

向量另一个应用场景是表面法线。每个3D表面都有一个表面法线,它只不过是一个指向远离表面并垂直于该表面的向量。该向量(表面法线)决定了环境中的光源如何照亮特定表面。这只是表面法线的一个方面,因为它在游戏的许多其他地方都有使用。向量也用于着色(我们将在稍后讨论),以及动态处理游戏中的视觉元素。

简而言之,向量是3D游戏中最常用的结构之一。这就是为什么学习和理解向量及其运算非常重要的原因。事不宜迟,让我们深入了解向量运算和一些基本的线性代数。

零向量

零向量是向量集合中的加法单位元。3D零向量表示为[0, 0, 0]。这个向量是一个特殊的向量,因为它唯一一个没有大小或方向的向量。很容易将零向量视为一个点,但读者应该记住,点表示一个位置。最好将零向量视为位移为零的向量。

向量取反

向量取反可以与标量数乘以-1相关联。取反后的向量被称为原始向量的加法逆元。任何维度的向量都通过其所有单个分量取反,如下所示:

  • - [x, y] = [-x, -y]
  • - [x, y, z] = [-x, -y, -z]

从几何角度来说,向量取反会产生一个与原始向量相同但方向相反的向量。

向量的模

向量具有大小(长度),可以通过取各个维度平方和的平方根来简单计算。如果您还记得使用勾股定理(对于二维)计算直角三角形斜边长度的基本技巧,这将非常简单。

对于二维和三维向量,其模分别定义如下:

2D3D

向量与标量的乘法和除法

向量可以乘以标量,这通过将向量的各个分量乘以标量值来实现。我们通过标量乘法在几何上得到的是另一个与原始向量平行的向量,但其大小或方向可能不同,具体取决于标量值。以下给出一些示例:

k[x, y, z] = [kx, ky, kz], -2[4, 0, 1] = [-8, 0, -2]

向量也可以除以标量,这等效于将向量乘以标量的倒数,如下所示:

1/k[x, y, z] = [x/k, y/k, z/k]

一些重要的方面需要注意

  • 我们不使用乘号进行标量-向量乘法,也不使用除号。
  • 乘法和除法优先于加法和减法。
  • 向量取反是标量乘法的一个特例,其中标量值始终为-1
  • 标量-向量乘法的几何解释是将向量的比例缩放|k|,即标量值。

向量归一化

在许多情况下,重要的不是向量的模,而是方向。在这些情况下,使用单位向量很方便,单位向量与原始向量具有相同的方向,但其模为1。将向量转换为模为1同时保持方向的向量的过程称为向量归一化。单位向量称为法线

通过将向量除以其模(标量除法,因为模值是标量)来归一化向量。结果是一个向量,它是给定原始向量的法线。

Vnorm = V/||V||,其中V不为零。

下图(摘自F. Dunn和I. Parberry合著的《图形和游戏开发的3D数学入门》一书)显示了二维空间中的单位向量,它们与单位半径圆的表面相切。在三维空间中,单位向量将与单位半径球体的表面相切。

unitVectors

向量加法和减法

只有当向量的维度相等时,才能进行向量加法或减法。将向量的各个分量相加或相减以获得结果向量。虽然向量加法是可交换的,但向量减法不是。以下是向量加法和减法的示例:

[2, 5, -1] + [3, 1, 0] = [5, 6, -1]

[3, 0, -3] – [5, -2, 0] = [-2, 2, -3]

向量加法和减法的几何概念是基本三角形法则。给定两个向量A和B的向量加法A+B,我们需要找到结果向量,该向量具有A的起始位置,但具有B的结束位置。这可以应用于许多向量。向量加法似乎很简单,但我们稍后将看到一个类似的机制,用于将向量从一个坐标空间变换到另一个坐标空间。

在下一篇文章中,我们将继续介绍其余的向量运算,并研究两个非常重要的运算:向量点积和向量叉积。

© . All rights reserved.