c# - 如何将 3x2 矩阵转换为 4x4 矩阵?

标签 c# matrix xna

我目前正在使用 3x2 矩阵(称为 Transform),生成方式如下:

private void CalculateTransform()
{
    _positionToOriginOffset = _position - _origin;

    if (_positionToOriginOffset.X < 0.0f)
        _positionToOriginOffset.X = 0.0f;
    if (_positionToOriginOffset.Y <= _maxY)
        _positionToOriginOffset.Y = _maxY;
    if (_positionToOriginOffset.Y > 0.0f)
        _positionToOriginOffset.Y = 0.0f;

    Transform = SimpleMatrix3x2.Identity;

    if (_zoom != 1.0f || _rotation != 0.0f)
    {
        Transform =
                SimpleMatrix3x2.CreateTranslation(-Position) *
                SimpleMatrix3x2.CreateScale(_zoom) *
                SimpleMatrix3x2.CreateRotation(_rotation) *
                SimpleMatrix3x2.CreateTranslation(Position);
    }

    Transform *= SimpleMatrix3x2.CreateTranslation(-_positionToOriginOffset);
}

public static SimpleMatrix3x2 CreateTranslation(SimpleVector2 position)
{
    SimpleMatrix3x2 result;

    result.M11 = 1.0f;
    result.M12 = 0.0f;
    result.M21 = 0.0f;
    result.M22 = 1.0f;

    result.M31 = position.X;
    result.M32 = position.Y;

    return result;
}

如何将 3x2 矩阵转换为 4x4 矩阵?

public static Matrix ToMatrix4x4(SimpleMatrix3x2 matrix)
{
    return new Matrix(...); ?
}

Matrix 类来自 Microsoft.Xna.Framework,它是一个 4x3 矩阵。

最佳答案

从程序上讲,XNA 矩阵类代表一个 4x4 矩阵。它有一个包含 16 个值(m11、m12、...、m44)的构造函数,因此您可以简单地将您的值传递给它。

从数学上讲,3d 变换矩阵的最后一列应该包含 (0,0,0,1)。第二个应该有 (0, 0, 1, 0),基于您从 2d 变换矩阵转换的事实。总的来说,它应该是这样的:

return new Matrix(m.11, m.12, 0, 0, 
                  m.21, m.22, 0, 0, 
                  0,    0,    1, 0, 
                  m.31, m.32, 0, 1);

希望对您有所帮助!

关于c# - 如何将 3x2 矩阵转换为 4x4 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39440369/

相关文章:

xna - 如何编码 XNA DirectShow 可以正常播放的 .wmv 文件?

c# - Windows Phone 7 按钮

c# - 如果目标程序集更改,则不使用 xmlserializer.dll

c - 我的矩阵在可视化和分配上不一样?

mysql - 根据mysql表中存储的数据创建相似度矩阵

c++ - Xbox 360 上的 OpenSteer?

c# - 如果文件名包含无效字符,GetExtension() 将失败

java - 如何将刻度从 java 转换为带有时区的 DateTime c#

matlab - 从 3D 矩阵变量切片时将 2D 矩阵展平为 1D 的最佳方法

xna - 在WP7 XNA 游戏中,如何在屏幕上创建一个半透明的矩形作为通知消息框?