我目前在游戏中教自己线性代数,我几乎已经准备好在简单的2D空间中使用我新发现的知识了。我计划使用数学库,使用矢量/矩阵等来表示不同于我上一场比赛的位置和方向,这很简单,不需要它。
我只是想对这个问题做一些澄清。首先,在4x4齐次坐标中表示2D空间中的位置是有效的,如下所示:
[400,300,0,1]
在这里,为了简单起见,我假设我们在800 x 600的固定分辨率(和屏幕空间)中工作,所以这应该是屏幕中间的一个点。
这有效吗?
假设此位置代表玩家的位置,如果我使用了矢量,我可以表示玩家面对的方向:
[400,400,0,0]
所以这个向量代表玩家面对屏幕的底部(如果我们在屏幕空间工作。
这有效吗?
最后,如果我想将玩家旋转90度,我知道我会将矢量乘以矩阵/四分之一,但这是我感到困惑的地方。我知道四分之一的效率更高,但我不确定如何改变我的球员所面对的方向。
有人可以解释构建一个四分体并将其乘以我的脸部向量背后的数学吗?
我还听说OpenGL和D3D以不同的方式表示向量,这是如何工作的?我并不完全理解。
我试图在几个月内进入3D空间之前开始掌握游戏中的基本线性代数。任何帮助将在上述这些主题中受到赞赏。
答案 0 :(得分:1)
您可以将您的位置表示为4D坐标,但是,我建议仅使用所需的尺寸(即2D矢量)。
方向主要表示为从玩家位置开始并指向相应方向的矢量。因此(0,1)的方向向量将更容易处理。 给定该向量,您可以使用旋转矩阵。在这种情况下,四元数并不是必需的,因为您不想围绕任意轴旋转。您只想围绕z轴旋转。你的助手库应该提供创建这种矩阵的方法并用它来变换向量(转换为正常)。
我不确定OpenGL和D3D的向量表示之间的区别。但我认为,这完全取决于内存的使用,这应该是你不想担心的事情。
答案 1 :(得分:1)
我无法回答您的所有问题,但就“有效”与否而言,这完全取决于它是否包含您需要的所有信息,并且对您有意义。
此外,对象面向的方向是非单位向量有点奇怪。基本上你不需要向量计算出它们面向的方向的信息,你只需要能够计算出它们从0度或弧度旋转的弧度或度数。因此,人们通常只是直接编码弧度或度数,因为许多线性代数库将允许您使用它们进行矢量数学。