我们如何在游戏中使用矢量和标量?从中受益匪浅。
有人可以准确地指出游戏领域中标量和矢量之间的区别吗?我发现无论我尝试多少次,但我可能需要这样的例子。
答案 0 :(得分:0)
标量只是数字的另一个词。区别在于标量是一个数字,它是矢量的一部分。标量没什么特别的。
向量是一组数字(一个或多个)定义的东西,在最常见的情况下,您有2个数字代表2D矢量或3个数字代表3D矢量。矢量的抽象概念只是一个箭头。
拿一张方格纸。选择该纸张上的任何一点并将其称为原点。它的坐标为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空间中有一个物体,它有很多力作用于它。重力是向下的向量(箭头)(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的表面,该矢量称为表面法线。您可以从该表面上指向灯光的点创建矢量。两个矢量之间角度的余弦是表面反射的光量。
您可以使用矢量来表示对象所具有的空间中的三个方向。说一个盒子,有一个沿着宽度指向的3D矢量,另一个沿着高度,最后一个沿着深度。每个向量的长度表示每一侧的长度。你可以制作另一个向量来表示盒子的角落与原点的距离(任何已知点)在3D中,这4个向量用于表示对象,称为变换矩阵(只是另一种由向量组成的向量) )
矢量可以做的事情列表是无穷无尽的。
基础与数字一样,你可以加,减,乘,除和向量。 然后有一系列特殊的函数用于向量,规范化,变换,点积和交叉积等等。对于这些东西,人们通常使用一个库来完成这一切。我的观点是,如果你真的想学习矢量及其使用方法,请在某个时刻编写自己的矢量库,直到使用库为止。
希望能为你清除一点泥泞,总是很难将你长期使用过的东西描述给新手,所以如果你需要,可以随意在评论中提问。