c++ - 二维矩阵变换(有玩家和地面)

标签 c++ matrix directx transformation directx-9

我有一个简单的游戏,我正在尝试以学习为目的,但矩阵有点难,尤其是在 DirectX 中。

我目前有一个 tilesystem,它在屏幕上呈现图 block 并在中心呈现一个字符位置(在启动时)

当玩家向左移动时,地面应该向右移动,这样他就始终位于屏幕中央。我使用 Sprite 来转换 Tiles 和玩家,但遇到了麻烦,因为地面在移动,而玩家仍然站在地面上,仍然位于中心。

这是一个自上而下的 2D 游戏,所以我只需要变换位置(可能还有旋转)

我的相机类有这个方法:

D3DXMatrixTransformation2D(&View, NULL, 0, &Scale, &Center, D3DXToRadian(Rotation), &Position);

我也试过(相机):

D3DXMatrixTranslation(&View, Position.x, Position.y, 0);

然后当我渲染地面 Sprite 时,我将其设置为转换为相机,但玩家有自己的矩阵,我在他移动时使用它。

和上面的一模一样,但是他的位置,旋转等等......

我缺少什么,我需要什么?

我只有一个适合屏幕宽度/高度的图 block 系统,所以我应该看到他何时移动,但他静止不动地站在中心和地面上,而玩家正在移动。

我是否需要反转矩阵以使地面沿相反方向移动?

只有玩家移动到这里,世界才会在他周围发生变化。

Example

我必须说,作为游戏编程中排名第一的语言,很少有指南解释诸如“2D 俯视相机”之类的简单事物...

最佳答案

对于您的问题,您应该阅读一些关于不同空间的内容:对象空间、世界空间和相机空间。 (主要与 3D 空间相关,但我会尝试针对 2D 空间进行解释)

对象空间 每个对象都应该建模,或者在您的情况下绘制在对象空间中。这意味着对于每个对象,它们都是一个矩阵,它确定中心,例如您的播放器。

世界空间 这是你的游戏世界。它描述了场景中每个对象的位置和方向。

相机空间 这描述了您游戏世界的当前 View 。假定相机固定在屏幕中间,您移动整个世界以适应当前视点(例如,以负位置平移)。

对于您的情况,这意味着您需要为每个对象创建一个矩阵,它描述了图像在该位置(对象空间)正确居中的偏移量。然后你需要将对象转换到世界空间。因此,您需要一个包含对象位置和方向的矩阵,并将其与对象矩阵相乘。最后,您必须考虑视点并乘以相机矩阵,以便将对象从世界空间转换到 View 空间。生成的矩阵就是您用于渲染的矩阵。

希望对您有所帮助:)

关于c++ - 二维矩阵变换(有玩家和地面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14645560/

相关文章:

c++ - D3D11_BUFFER_DESC字节宽度 "not working"

python - 我如何使用opencv将相机坐标转换为世界坐标

c++ - 我必须按两次空格键才能在 xCode 中编写一些代码

python - 将一个大的numpy矩阵分层划分为10个独立的子矩阵

python - 矩阵和向量中的除法和乘法序列

c++ - 使用 C++ 在 Windows 中进行硬件加速图像缩放

c++ - UART 到 Qt 软件错误 - 为什么数据总是 split ?

c++ - 将多个逗号分隔的参数传递给自定义 << 运算符

python - 从另一个列表创建索引/坐标矩阵

c++ - 如何防止direct2d “stretching”窗口大小改变时的 View ?