8.2 向量
向量是一个常用的游戏编程工具。了解向量数学最简单的方式是在游戏中使用向量,很快就可以熟悉向量的各种用法。前面的章节中已经创建了一个简单的向量类,但是到现在为止还没有定义它的任何属性。
8.2.1 向量的定义
在游戏编程中,向量用于操作和描述3D游戏世界。向量的数学定义是既有大小又有方向的量。大小就是向量的长度。
游戏编程中最常用的向量是2D、3D和4D向量。在使用投影矩阵将顶点从3D转换到2D空间时,会用到4D向量。纸面上看起来,向量和位置很类似。位置[0,3,0]和向量[0,3,0]有相同的内部值,但是它们代表不同的概念。位置使用坐标系统定义世界中的一个绝对位置。向量描述一个方向(在这里为向上)和大小或者说长度(在这里为3)。图8-3比较了两者的不同。例如,“离地面3英里”不是一个位置,而是使用位置和长度描述了一个位置,换句话说,它是一个向量。
在游戏编程中,向量用于回答如下问题:
● 敌人的飞船位于[0,0,90],玩家的飞船位于[0,80,-50]。敌人应该向哪个位置发射导弹?在每一帧中,如何更新导弹的位置,使其朝向玩家不断移动?
● 玩家与导弹的位置小于1m吗?
● 玩家在墙的哪一边?
● 玩家在看NPC吗?
● 给定一个表示枪的后部的四方形,子弹将向哪个方向飞出?
● 光应该如何从这个表面反射出去?
● 把汽车向前移动3m。
● 玩家击中了一个敌人,敌人应该向哪个方向运动?
● 如何将子弹的动力增加100?
● 哪个玩家最接近外星人的飞船?