【问题标题】:2D Isometric Camera Matrix2D 等距相机矩阵
【发布时间】:2013-10-10 15:01:04
【问题描述】:

我有一个使用笛卡尔坐标系布置的小型游戏关卡。我有一个相机类,我想使用这个矩阵将所有点从笛卡尔空间转换到等距空间:

[cos(45), sin(45)]

[-sin(45), cos(45)]

在纸面上,将任何向量乘以矩阵成功地在第一次旋转后将该向量放入等距空间。

现在,我只能使用此矩阵根据摄像机位置绘制关卡:

public Matrix GetTransformation()
    {
        _mTransform =
            Matrix.CreateTranslation(-Position.X, -Position.Y, 0);

        return _mTransform;
    }

我感到困惑的地方是我上面列出的矩阵适合该等式。

CameraIso2D 不带参数,但这里是 Draw 函数

public void Draw(SpriteBatch sb)
    {
        // Start drawing from this GameLayer
        sb.Begin(
            SpriteSortMode.FrontToBack,
            BlendState.AlphaBlend,
            null,
            null,
            null,
            null,
            _transformation);

        // Draw all contained objects
        foreach (DrawableGameObject dgo in _drawableGameObjects)
            dgo.Draw(sb);

        // End drawing from this GameLayer
        sb.End();
    }

_transformation 是每次更新从 CameraIso2D 返回的矩阵 _mTransform

【问题讨论】:

  • 您可以添加您的相机声明代码吗?
  • 相机对象不带任何参数。 GameLevel 包含 GameLayers 和一个相机。 GameLayers 包含他们绘制的游戏对象。 GameLayers 使用 GameLevels 相机在每次更新时获取变换矩阵。我添加了绘制代码,希望对您有所帮助。谢谢

标签: c# matrix xna transformation isometric


【解决方案1】:

我通过使用两个矩阵解决了这个问题。第一个矩阵使用常规的相机变换,并作为变换矩阵传递给 spriteBatch.Begin。对于等距变换矩阵,我使用 Matrix.CreateRotationZ 来模拟等距 Y 轴旋转,然后我使用 Matrix.CreateScale 来模拟从 Y 轴向下的等距旋转。游戏对象需要笛卡尔坐标的位置,以及它们的等距坐标的向量2。将GameObject的笛卡尔坐标通过等距变换矩阵得到等距坐标,然后绘制到那个位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2015-06-29
    相关资源
    最近更新 更多