【问题标题】:Linear Algebra in Games in a 2D space2D 空间中游戏中的线性代数
【发布时间】:2012-03-31 07:46:27
【问题描述】:

我目前正在游戏中自学线性代数,我几乎感觉已经准备好在一个简单的 2D 空间中使用我的新知识。我打算使用一个数学库,用向量/矩阵等来表示位置和方向,这与我上次的游戏不同,它很简单,不需要它。

我只是想澄清一下这个问题。首先,用 4x4 齐次坐标表示 2D 空间中的位置是否有效,如下所示:

[400, 300, 0, 1]

在这里,为了简单起见,我假设我们在 800 x 600 的固定分辨率(和屏幕空间)下工作,所以这应该是屏幕中间的一个点。

这有效吗?

假设这个位置代表玩家的位置,如果我用一个向量,我可以代表玩家面对的方向:

[400, 400, 0, 0]

所以这个向量表示玩家面向屏幕底部(如果我们在屏幕空间中工作。

这有效吗?

最后,如果我想将播放器旋转 90 度,我知道我会将向量乘以矩阵/四元数,但这是我感到困惑的地方。我知道四分位数的效率更高,但我不确定如何旋转我的玩家所面对的方向。

有人可以解释构造一个四分位数并将其乘以我的脸向量的数学原理吗?

我还听说 OpenGL 和 D3D 以不同的方式表示向量,这是如何工作的?我不是很明白。

在几个月后我踏入 3D 空间之前,我正在尝试开始掌握游戏中的基本线性代数。

【问题讨论】:

  • 您的大部分问题取决于一个或另一个库的实施细节。我强烈建议最好的方法可能是选择一个“最适合”的库,然后开始使用它。恕我直言...
  • 感谢您的建议。跳进去开始玩弄东西似乎总是一个好主意。

标签: math 2d linear-algebra algebra


【解决方案1】:

您可以将您的位置表示为 4D 坐标,但是,我建议您仅使用所需的尺寸(即 2D 矢量)。

方向主要表示为从玩家位置开始并指向相应方向的向量。所以 (0,1) 的方向向量会更容易处理。 给定该向量,您可以使用旋转矩阵。在这种情况下,四元数并不是真正必要的,因为您不想绕任意轴旋转。您只想绕 z 轴旋转。您的帮助程序库应提供创建此类矩阵并使用它转换向量的方法(转换为法线)。

我不确定 OpenGL 和 D3D 的向量表示之间的区别。但我认为,这完全与内存使用有关,这应该是您不想担心的事情。

【讨论】:

  • 好的,感谢您的回复。我正在考虑使用单位长度的向量,正如您所说,这样会更有意义并且更容易处理。另外,感谢您澄清有关四分位数的问题,我只是想了解我正在使用的数学库背后的数学。这就是我阅读 Lengyel 的 3D 游戏编程数学的全部原因。我正在努力更好地了解正在发生的事情。
【解决方案2】:

我无法回答您的所有问题,但就什么是“有效”而言,这完全取决于它是否包含您需要的所有信息并且对您有意义。

此外,将对象面向的方向设为非单位向量有点奇怪。基本上,您不需要矢量多长时间的信息来确定它们所面临的方向,您只需要能够计算出它们从 0 度或弧度旋转的弧度或度数。因此,人们通常直接对弧度或度数进行简单编码,因为许多线性代数库允许您使用它们进行矢量数学运算。

【讨论】:

  • 感谢您的回复,我仍在研究这些想法。感谢您的帮助。
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 2013-08-28
  • 2015-11-17
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多