如何将 3x2 矩阵转换为 4x4 矩阵?
How to convert a 3x2 matrix into 4x4 matrix?
我目前使用的是 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
class 来自 Microsoft.Xna.Framework
,它是一个 4x3 矩阵。
从程序上讲,XNA 矩阵 class 代表一个 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);
希望对您有所帮助!
我目前使用的是 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
class 来自 Microsoft.Xna.Framework
,它是一个 4x3 矩阵。
从程序上讲,XNA 矩阵 class 代表一个 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);
希望对您有所帮助!