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

时间:2015-06-15 02:07:52

标签: c# matrix xna

我正在用C#和XNA 4.0制作游戏。在某些关卡中,我需要一个相机矩阵,以使关卡看起来向左/向右滚动。此外,当使用设置更改窗口大小时,我还需要缩放矩阵来缩放图形。我的两个矩阵都是可用的,但是我现在用这样的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);
}

我想要的是如果它是滚动级别同时应用两个矩阵(根据窗口大小缩放图形,然后使用相机矩阵进行级别滚动)。但是,简单地添加和乘以矩阵不会产生准确的结果(添加会阻止图形缩放到它们应该的精确量,并且相乘会使相机滚动不准确)。如何同时应用这两个矩阵?

1 个答案:

答案 0 :(得分:1)

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

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

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