游戏中的矢量和缩放器

Vectors and Scaler in games

我们如何在游戏中使用矢量和标量?从中得到什么好处。

有人能准确指出游戏领域中标量和矢量之间的区别吗?我发现无论我尝试理解多少次,但我可能需要示例。

标量只是数字的另一种说法。区别在于标量是作为矢量一部分的数字。标量没有什么特别之处。

向量是定义某物的一组数字(一个或多个),在最常见的情况下,您有 2 个数字表示 2D 向量或 3 个数字表示 3D 向量。矢量的抽象概念只是一个箭头。

拿一张方格纸。 Select 那张纸上的任何一点,并称之为原点。它的坐标将为 x = 0, y = 0。现在从该点向任意方向和任意长度绘制一条直线。要描述该箭头,您需要定义向量。计算箭头末端距起点(原点)在页面上的距离,即 x 分量。然后页面向上多远就是y分量。

您刚刚创建了一个包含两个数字 (x,y) 的矢量,它们完全描述了纸上的箭头。这种类型的向量总是从零开始。您还可以通过矢量的方向(即北、东、南...)和长度来描述矢量。

在 3D 中,您需要 3 个数字来描述任何箭头。 (x,y,z)

向量非常方便。您可以使用矢量来描述物体移动的速度和方向。矢量表示一个小箭头,从对象现在所在的位置开始,到对象在下一个时间单位内的位置结束。

因此坐标x,y 处的物体具有向量速度(0.2,0.3)。要计算物体在下一个时间单位的位置只需将向量添加到坐标

newXPos = currentXPos + velocityVectorX
newYPos = currentYPos + velocityVectorY

如果你想将速度减半,你可以将向量乘以 0.5

velocityVectorX = velocityVectorX * 0.5
velocityVectorY = velocityVectorY * 0.5

你做同样的事情来提高速度。

velocityVectorX = velocityVectorX * 2
velocityVectorY = velocityVectorY * 2

您可能有一个 3D 物体 space,它受到许多力的作用。有一个指向下方 (G) 的矢量(箭头)的引力。向上的空气阻力 (R)。当前速度另一个箭头指向它行进的方向 (V)。您可以根据需要(需要)使用任意多个来描述推动和拉动物体的所有力。当您需要及时计算下一个实例(比如一秒)的对象位置时,您只需将所有力矢量加在一起以获得总力作为矢量并将其添加到对象位置

Object.x = Object.x + G.x + R.x + V.x;
Object.y = Object.y + G.y + R.y + V.y;
Object.z = Object.z + G.y + R.z + V.z;

如果你只想要速度

V.x = V.x + G.x + R.x;
V.y = V.y + G.y + R.y;
V.z = V.z + G.y + R.z;

这是一秒内的新速度。

矢量可以做很多事情。矢量可用于在 3D 中远离表面,该矢量称为表面法线。您从该表面上的一个点创建一个指向灯光的矢量。两个向量之间夹角的余弦值就是表面将反射多少光。

您可以使用向量来表示对象具有的 space 中的三个方向。说一个盒子,有一个 3D 矢量指向宽度,另一个指向高度,最后一个指向深度。每个向量的长度代表每条边的长度。您可以制作另一个向量来表示盒子的角点与原点(任何已知点)的距离。在 3D 中,这 4 个向量用于表示对象并称为变换矩阵(只是另一种由向量组成的向量)

矢量可以做的事情是无穷无尽的。

基础就像数字一样,可以加减乘除和矢量。 然后还有许多用于向量的特殊函数,归一化、变换、点积和叉积等等。对于这些事情,人们通常会使用一个为您完成所有这些工作的库。我的观点是,如果您真的想了解矢量及其使用方式,请在某个时候编写您自己的矢量库,然后再使用一个库。

希望这能为您扫清一点障碍,向一个新手描述您已经使用了很长时间的东西总是很困难,所以如果您需要,请随时在评论中提问。