二维等距相机矩阵

时间:2013-10-10 15:01:05

标签: c# matrix xna transformation isometric

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

[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

1 个答案:

答案 0 :(得分:0)

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