3D游戏引擎数学基础2--向量(上篇)

在几何学中,向量用一个有向线段表示,如图:
这里写图片描述
向量有两个重要属性:长度和方向,向量的用途非常广,几乎可以说是3D图形学中最重要的数学知识了,例如光线的走向,模型的动画,玩家的方向控制都需要用到向量。因为向量的属性中不含有位置信息,所以两个向量只要长度和方向相同,无论起点是否相同,我们都认为二者相等,很容易想想,这样的两个向量彼此平行。(就像上图中的u向量和v向量)
因为向量的位置并不影响其属性,所以我们可以将所有彼此平行的向量进行平移,使其起点与坐标原点重合。当某一向量的起始端与标准坐标原点重合时,我们就称该向量处于标准位置。
我们通常用小写的粗体来表示一个向量,有时也用大写的粗体字母。例如2D,3D,4D的向量分别表示为:u=(x,y), N=(X, Y, Z), c (x, y, z, w)

现在,介绍4个特殊的向量。第一个,零向量:所有分量都是零,用粗体的数字0表示,0 = (0, 0, 0)。另外3个是标准基向量,这些向量方向分别和坐标轴x,y,z一致,长度为1,用i,j,k表示。如图:
这里写图片描述
向量也和标量一样可以进行计算,向量的计算包括:相等、长度、规范化、加法、减法、点乘、叉乘、数乘等。本节介绍相等、长度、规范化、加法、减法运算。

向量相等
几何学中,如果两个向量的长度和方向均相等,那么这两个向量相等。在代数学中,如果两个向量维数相同并且相应的分量相等,那么我们称这两个向量相等。例如,若ux = vx, uy = vy, uz = vz,则(ux, uy, uz) = (vx, vy, vz)。
在引擎中,我们需要重定义一个==操作符来判断两个向量是否相等。

向量长度
几何学中,向量的模就是向量的长度,也就是有向线段的长度。根据各分量的大小,我们可以通过代数方法计算向量的大小。公式如下:
|u| = sqrt (ux^2 + uy^2 + uz^2)
于是,我们的引擎中需要定义一个计算向量长度的函数。

向量规范化
向量的规范化(normaling)就是使向量的模变为1,即变为单位向量。可以通过向量的每个分量都除以向量的模来实现,如下所示:
u = u / |u| = (ux / |u|, uy / |u|, uz / |u|)
于是,我们的引擎中需要定义一个将向量规范化的函数。

向量加法
向量的加法定义为两个向量对应的分量相加,注意,只有维度相同的向量可以相加。
u + v = (ux + vx, uy + vy, uz + vz)
下图是向量加法的几何解释:
这里写图片描述
向量加法是非常常用的计算方法,比如玩家在向前奔跑时,加上一个右转的速度,这时候玩家的奔跑方向和速度都会通过加法方式去计算出来。
然后,我们的引擎中又多了一个加法操作符的重载。

向量减法
类似于向量加法,向量的减法也是在两个向量对应的分量上计算的。同样,参与运算的向量维度必须相同。
u - v = u + -v = (ux - vx, uy - vy, uz - vz)
下图是向量减法的几何解释
这里写图片描述
然后,我们的引擎中又多了一个减法操作符的重载。

好了,未免一次将太多的知识记录下来,这边文章就写到这里吧。

由于笔者水平有限,文中难免会出现错漏之处,欢迎读者批评指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值