如何在 spriteBatch.Draw() 中应用多个矩阵?

How do I apply multiple matrices in spriteBatch.Draw()?

我正在用 C# 和 XNA 4.0 制作游戏。在某些关卡中,我需要一个相机矩阵来使关卡看起来像滚动 left/right。此外,我还需要一个缩放矩阵来在设置用于更改 window 大小时缩放图形。我的两个矩阵都是函数式的,但我目前在 draw 方法中这样调用它们:

if (scrollingLevel)
{
    //Use the camera matrix to make the stage scroll
    spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.transform);
}
else
{
    //Use the scaling matrix to scale the graphics
    spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, transform);
}

如果是滚动关卡,我想要的是同时应用两个矩阵(根据window大小缩放图形,然后使用相机矩阵使关卡滚动)。但是,简单地对矩阵进行加法和乘法并不能产生准确的结果(加法会阻止图形缩放到它们应有的确切数量,而乘法会使相机滚动不准确)。如何同时应用这两个矩阵?

在传递给 spriteBatch.Begin 之前简单地乘以矩阵。

Matrix multiplication 允许将两个矩阵的效果附加到一个矩阵中。请注意,此操作不可交换,这意味着 A * B != B * A.

在您的情况下,您可能应该将缩放矩阵与相机矩阵相乘。