2021SC@SDUSC
Struct Matrix
表示4x4数学矩阵。
Constructors
Matrix(Single)
初始化矩阵结构的新实例。
Matrix(Single, Single, Single, Single, Single, Single, Single, Single, Single, Single, Single, Single, Single, Single, Single, Single)
初始化矩阵结构的新实例。
Matrix(Single[])
初始化矩阵结构的新实例。
Fields
Identity
身份
返回一个Matrix类型
M11
值在矩阵的第1行第1列。
System.Single
M12
值在矩阵的第1行第2列。
像这样的还有一大堆;
SizeInBytes
矩阵类型的大小,以字节为单位。
返回一个Int32
Zero
所有组件设置为零的矩阵。
返回Matrix;
Properties
Backward
获取或设置矩阵的向后向量向量3,即 M31、 m32和 M33。
Vector3
Column1
获取或设置矩阵中的第一列,即 M11、 M21、 m31和 M41。
返回Vector4
Down
获取或设置矩阵的向量3,即-M21、-m22和-M23。
Forward
获取或设置矩阵的前向向量3,即-M31、-m32和-M33。
IsIdentity
获取一个值,该值指示此实例是否为单位矩阵。
Item[Int32]
获取或设置指定索引处的组件。
Item[Int32, Int32]
获取或设置指定索引处的组件。
Left
获取或设置矩阵的左向量3,即-M11、-m12和-M13。
Right
获取或设置矩阵的正确 Vector3,即 M11、 m12和 M13。
Row1
获取或设置矩阵中的第一行,即 M11、 M12、 m13和 M14。
TranslationVector
获取或设置矩阵的转换,即 M41、 m42和 M43。
Up
获取或设置矩阵的 Vector3,即 M21、 m22和 M23。
Methods
Add(Matrix, Matrix)
确定两个矩阵的和。
返回Matrix
Add(ref Matrix, ref Matrix, out Matrix)
确定两个矩阵的和。
AffineTransformation(Single, Quaternion, Vector3)
创建一个3 d 仿射变换矩阵。
Matrix
AffineTransformation(Single, ref Quaternion, ref Vector3, out Matrix)
创建一个3 d 仿射变换矩阵。
AffineTransformation(Single, Vector3, Quaternion, Vector3)
创建一个3 d 仿射变换矩阵。
AffineTransformation(Single, ref Vector3, ref Quaternion, ref Vector3, out Matrix)
创建一个3 d 仿射变换矩阵。
AffineTransformation2D(Single, Vector2, Single, Vector2)
创建一个二维仿射变换矩阵。
AffineTransformation2D(Single, ref Vector2, Single, ref Vector2, out Matrix)
创建一个二维仿射变换矩阵。
AffineTransformation2D(Single, Single, Vector2)
创建一个二维仿射变换矩阵。
AffineTransformation2D(Single, Single, ref Vector2, out Matrix)
创建一个二维仿射变换矩阵。
Billboard(Vector3, Vector3, Vector3, Vector3)
创建一个左手球形广告牌,该广告牌围绕指定的对象位置旋转。
Billboard(ref Vector3, ref Vector3, ref Vector3, ref Vector3, out Matrix)
创建一个左手球形广告牌,该广告牌围绕指定的对象位置旋转。
CreateFromAxisAngle(Vector3, Single)
创建一个围绕任意向量旋转的新矩阵。
CreateFromAxisAngle(ref Vector3, Single, out Matrix)
创建一个围绕任意向量旋转的新矩阵。
CreateWorld(Vector3, Vector3, Vector3)
根据指定的参数创建世界矩阵
CreateWorld(ref Vector3, ref Vector3, ref Vector3, out Matrix)
根据指定的参数创建世界矩阵
Decompose(out Transform)
将矩阵分解为缩放、旋转和平移。
Decompose(out Vector3, out Matrix, out Vector3)
将矩阵分解为缩放、旋转和平移。
Decompose(out Vector3, out Quaternion, out Vector3)
将矩阵分解为缩放、旋转和平移。
DecomposeLQ(out Matrix, out Matrix)
将一个矩阵分解为一个下三角矩阵 l 和一个正交整化的矩阵 q。
DecomposeQR(out Matrix, out Matrix)
将矩阵分解为正交整化矩阵 q 和右三角矩阵 r。
DecomposeUniformScale(out Single, out Quaternion, out Vector3)
将均匀比例尺矩阵分解为比例尺、旋转和平移。一个统一的刻度矩阵在每个轴上都有相同的刻度。
Determinant()
计算矩阵的行列式。
Divide(Matrix, Matrix)
确定两个矩阵的商。
Divide(Matrix, Single)
根据给定的值缩放矩阵。
Divide(ref Matrix, ref Matrix, out Matrix)
确定两个矩阵的商。
Divide(ref Matrix, Single, out Matrix)
根据给定的值缩放矩阵。
Equals(Matrix)
确定指定的矩阵是否等于此实例。
Equals(ref Matrix)
确定指定的矩阵是否等于此实例。
ExchangeColumns(Int32, Int32)
交换矩阵中的两列。
ExchangeRows(Int32, Int32)
交换矩阵中的两行。
Exponent(Matrix, Int32)
对矩阵执行指数运算。
Exponent(ref Matrix, Int32, out Matrix)
对矩阵执行指数运算。
Methods
Add(Matrix, Matrix)
确定两个矩阵的和。
Matrix
Add(ref Matrix, ref Matrix, out Matrix)
确定两个矩阵的和。
AffineTransformation(Single, Quaternion, Vector3)
创建一个3 d 仿射变换矩阵。
AffineTransformation(Single, ref Quaternion, ref Vector3, out Matrix)
创建一个3 d 仿射变换矩阵。
AffineTransformation(Single, Vector3, Quaternion, Vector3)
创建一个3 d 仿射变换矩阵。
AffineTransformation2D(Single, Vector2, Single, Vector2)
创建一个二维仿射变换矩阵。
AffineTransformation2D(Single, Single, Vector2)
创建一个二维仿射变换矩阵。
AffineTransformation2D(Single, Single, ref Vector2, out Matrix)
创建一个二维仿射变换矩阵。
Billboard(Vector3, Vector3, Vector3, Vector3)
创建一个左手球形广告牌,该广告牌围绕指定的对象位置旋转。
CreateFromAxisAngle(Vector3, Single)
创建一个围绕任意向量旋转的新矩阵。
CreateFromAxisAngle(ref Vector3, Single, out Matrix)
创建一个围绕任意向量旋转的新矩阵。
CreateWorld(ref Vector3, ref Vector3, ref Vector3, out Matrix)
根据指定的参数创建世界矩阵
Decompose(out Transform)
将矩阵分解为缩放、旋转和平移。
Decompose(out Vector3, out Matrix, out Vector3)
将矩阵分解为缩放、旋转和平移。
Decompose(out Vector3, out Quaternion, out Vector3)
将矩阵分解为缩放、旋转和平移。
DecomposeLQ(out Matrix, out Matrix)
将一个矩阵分解为一个下三角矩阵 l 和一个正交整化的矩阵 q。
DecomposeQR(out Matrix, out Matrix)
将矩阵分解为正交整化矩阵 q 和右三角矩阵 r。
DecomposeUniformScale(out Single, out Quaternion, out Vector3)
将均匀比例尺矩阵分解为比例尺、旋转和平移。一个统一的刻度矩阵在每个轴上都有相同的刻度。
ExchangeColumns(Int32, Int32)
交换矩阵中的两列。
ExchangeRows(Int32, Int32)
交换矩阵中的两行。
Exponent(Matrix, Int32)
对矩阵执行指数运算。
Exponent(ref Matrix, Int32, out Matrix)
对矩阵执行指数运算。
LowerTriangularForm(ref Matrix, out Matrix)
使用初等行运算将矩阵转换为下三角形。
Multiply(Matrix, Matrix)
确定两个矩阵的乘积。
Multiply(Matrix, Single)
根据给定的值缩放矩阵。
Multiply(ref Matrix, ref Matrix, out Matrix)
确定两个矩阵的乘积。
Multiply(ref Matrix, Single, out Matrix)
根据给定的值缩放矩阵。
Negate(Matrix)
否定矩阵。
Ortho(Single, Single, Single, Single)
创建一个左手正投影图矩阵。
Ortho(Single, Single, Single, Single, out Matrix)
创建一个左手正投影图矩阵。
Orthogonalize()
正交化指定的矩阵。
Orthogonalize(Matrix)
正交化指定的矩阵。
Orthogonalize(ref Matrix, out Matrix)
正交化指定的矩阵。
Orthonormalize(Matrix)
正交化指定的矩阵。
Orthonormalize(ref Matrix, out Matrix)
正交化指定的矩阵。
OrthoOffCenter(Single, Single, Single, Single, Single, Single)
创建一个左手定制的正投影图矩阵。
OrthoOffCenter(Single, Single, Single, Single, Single, Single, out Matrix)
创建一个左手定制的正投影图矩阵。
Perspective(Single, Single, Single, Single)
创建一个左手透视投影矩阵。
Perspective(Single, Single, Single, Single, out Matrix)
创建一个左手透视投影矩阵。
PerspectiveFov(Single, Single, Single, Single)
创建基于视场的左手透视投影矩阵。
PerspectiveFov(Single, Single, Single, Single, out Matrix)
创建基于视场的左手透视投影矩阵。
PerspectiveOffCenter(Single, Single, Single, Single, Single, Single)
创建一个左手,定制的透视投影矩阵。
PerspectiveOffCenter(Single, Single, Single, Single, Single, Single, out Matrix)
创建一个左手,定制的透视投影矩阵。
ReducedRowEchelonForm(ref Matrix, ref Vector4, out Matrix, out Vector4)
使用初等行操作将矩阵转换为简化的阶梯形矩阵。
RotationAxis(Vector3, Single)
创建一个围绕任意轴旋转的矩阵。
RotationAxis(ref Vector3, Single, out Matrix)
创建一个围绕任意轴旋转的矩阵。
RotationQuaternion(Quaternion)
从四元数创建旋转矩阵。
RotationQuaternion(ref Quaternion, out Matrix)
从四元数创建旋转矩阵。
RotationX(Single)
创建一个围绕 x 轴旋转的矩阵。
RotationX(Single, out Matrix)
创建一个围绕 x 轴旋转的矩阵。
RotationY(Single)
创建一个围绕 y 轴旋转的矩阵。
RotationY(Single, out Matrix)
创建一个围绕 y 轴旋转的矩阵。
RotationYawPitchRoll(Single, Single, Single)
创建具有指定偏航、俯仰和滚转的旋转矩阵。
RotationYawPitchRoll(Single, Single, Single, out Matrix)
创建具有指定偏航、俯仰和滚转的旋转矩阵。
RotationZ(Single)
创建一个围绕 z 轴旋转的矩阵。
RotationZ(Single, out Matrix)
创建一个围绕 z 轴旋转的矩阵。
RowEchelonForm(Matrix)
使用初等行操作将矩阵带入阶梯形矩阵;
RowEchelonForm(ref Matrix, out Matrix)
使用初等行操作将矩阵带入阶梯形矩阵;
Scaling(Vector3)
创建沿 x 轴、 y 轴和 y 轴伸缩的矩阵。
Scaling(ref Vector3, out Matrix)
创建沿 x 轴、 y 轴和 y 轴伸缩的矩阵。
Scaling(Single)
创建一个沿所有三个轴均匀扩展的矩阵。
Scaling(Single, out Matrix)
创建一个沿所有三个轴均匀扩展的矩阵。
Scaling(Single, Single, Single)
创建沿 x 轴、 y 轴和 y 轴伸缩的矩阵。
Scaling(Single, Single, Single, out Matrix)
创建沿 x 轴、 y 轴和 y 轴伸缩的矩阵。
Skew(Single, ref Vector3, ref Vector3, out Matrix)
通过平移向量、旋转向量和旋转角度创建倾斜/剪切矩阵。在平移矢量方向上进行剪切,平移矢量和旋转矢量定义剪切平面。效果是这样的,扭曲的旋转向量具有与旋转本身特定的角度。
SmoothStep(Matrix, Matrix, Single)
在两个矩阵之间执行立方插值。
SmoothStep(ref Matrix, ref Matrix, Single, out Matrix)
在两个矩阵之间执行立方插值。
Subtract(Matrix, Matrix)
确定两个矩阵之间的差异。
Subtract(ref Matrix, ref Matrix, out Matrix)
确定两个矩阵之间的差异。
Transformation(Vector3, Quaternion, Vector3)
创建一个包含 x、 y 和 z 旋转以及缩放和平移的矩阵。
Transformation(Vector3, Quaternion, Vector3, Vector3, Quaternion, Vector3)
创建一个变换矩阵。
Transformation(ref Vector3, ref Quaternion, ref Vector3, out Matrix)
创建一个包含 x、 y 和 z 旋转以及缩放和平移的矩阵。
Transformation(ref Vector3, ref Quaternion, ref Vector3, ref Vector3, ref Quaternion, ref Vector3, out Matrix)
创建一个变换矩阵。
Transformation2D(Vector2, Single, Vector2, Vector2, Single, Vector2)
创建一个2 d 变换矩阵。
Transformation2D(ref Vector2, Single, ref Vector2, ref Vector2, Single, ref Vector2, out Matrix)
创建一个2 d 变换矩阵。
Translation(Vector3)
使用指定的偏移量创建转换矩阵。
Translation(ref Vector3, out Matrix)
使用指定的偏移量创建转换矩阵。
TransposeByRef(ref Matrix, ref Matrix)
计算指定矩阵的转置。
UpperTriangularForm(Matrix)
使用初等行运算将矩阵转换为上三角形。
UpperTriangularForm(ref Matrix, out Matrix)
使用初等行运算将矩阵转换为上三角形。
Multiply(Matrix, Matrix)
将两个矩阵相乘。
Multiply(Matrix, Single)
按给定值缩放矩阵。
Multiply(Single, Matrix)
按给定值缩放矩阵。
Subtraction(Matrix, Matrix)
减去两个矩阵。
UnaryNegation(Matrix)
否定矩阵。
UnaryPlus(Matrix)
断言一个矩阵(原样返回)。
基础定义
const Matrix Matrix::Identity(
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
float Matrix::GetDeterminant() const
{
const float temp1 = M33 * M44 - M34 * M43;
const float temp2 = M32 * M44 - M34 * M42;
const float temp3 = M32 * M43 - M33 * M42;
const float temp4 = M31 * M44 - M34 * M41;
const float temp5 = M31 * M43 - M33 * M41;
const float temp6 = M31 * M42 - M32 * M41;
return M11 * (M22 * temp1 - M23 * temp2 + M24 * temp3) - M12 * (M21 * temp1 -
M23 * temp4 + M24 * temp5) + M13 * (M21 * temp2 - M22 * temp4 + M24 * temp6) -
M14 * (M21 * temp3 - M22 * temp5 + M23 * temp6);
}