【问题标题】:How do I apply multiple matrices in spriteBatch.Draw()?如何在 spriteBatch.Draw() 中应用多个矩阵?
【发布时间】:2015-06-15 16:56:07
【问题描述】:

我正在用 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);
}

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

【问题讨论】:

    标签: c# matrix xna


    【解决方案1】:

    在传递给spriteBatch.Begin 之前,只需将矩阵相乘即可​​。

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多