DirectX 矩阵

基础:

下标:第一个下标为该元素所在行的索引,第二个下标为该元素所在列的索引。如下图所示

image

行向量和列向量:只有单行的向量称为行向量,只有单列的称之为列向量。

相等

维数和元素都相等

数乘(与标量相乘)

每一个元素与标量相乘

加法(矩阵+矩阵=矩阵)

两个矩阵相应元素想加所得的矩阵,必须维数相等

矩阵乘法(矩阵*矩阵=矩阵)

条件:A的列数必须等于B的行数

定义:A(m*n) B(n*p) 则乘积AB有意义,且等于一个矩阵C(m*p),其中乘积C[i][j] = A的第i个行向量 * B的第j个列向量的点积。

单位矩阵(类似于标量1与矩阵相乘不改变矩阵)

定义:除主对角线上的元素为1外,其它全为0

image

单位阵可以作为一个乘法单位(multiplicative identity) MI = IM = M

即,用一个单位矩阵与某一个矩阵相乘,不改变该矩阵。而且,某一矩阵与单位矩阵相乘,是矩阵简洁可交换的特例,单位矩阵对于标量可以认为是矩阵中的”1”

证明:

image

逆矩阵(矩阵的乘法逆运算)

  • 只有方阵才有逆矩阵
  • 一个n*n的矩阵M的逆矩阵也是一个n*n的矩阵用clip_image002[4]表示
  • 并非所有方阵都有逆矩阵
  • 一个矩阵与其逆阵的乘积为单位阵,当一个矩阵与其逆矩阵相乘时,可交换相乘次序
  • 矩阵的转置

  • 通过交换矩阵的行和列

image

D3DX矩阵

编程D3DX程序时,我们通常只使用4*4的矩阵和1*4的行向量。注意,使用这两种维护的矩阵,意味着以下矩阵乘法是有意义的:

向量-矩阵乘法。若v为1*4的行向量,T为4*4的矩阵,则乘积vT有意义,且其结果为1*4的行向量

矩阵矩阵乘法:若T和R都为4*4的矩阵,则乘积TR和RT有意义,其结果为4*4的矩阵。注意TR和RT不一定相等。

基本变换

1*4向量在3d坐标系中点表示方法p = (p1,p2,p3,0

1*4向量在3d坐标系中向量的表示方法 v = (v1,v2,v3,1) 扩展后的向量称为齐次向量,因为齐次向量即可以表示点,又可以表示向量

向量处于齐次空间:

image

平移矩阵

要想将向量(x,y,z,1)沿x轴平稳px单位,y轴平移py个单位,z轴平移pz个单位 我们只需要将该向量与以下矩阵相乘

image

用于创建平移矩阵的D3DX函数为D3DXMatrixTranslation

旋转矩阵

我们可以用如下3个矩阵分别表示绕x,y,z轴旋转θ弧度

image

image

image

旋转矩阵R的逆矩阵与其转置相等,即

clip_image002[6]

比例变的矩阵

比例变的

如果让一个向量沿x,y,z轴分别放大qx,qy,qz倍,可令该向量与如下矩阵相乘

image

Dx中的函数为

image

几何变的的组合

矩阵变换的一个最关键的优点是,可借助矩阵乘法将几种变换组合为一个变换矩阵

向量变换的一些函数

D3DXVerc3TransformCoord函数对点进行变换,并假定向量第4个分量为1

D3DXVec3TransformNormal用于向量变换,并假定向量第4个分量为0

image

原文地址:https://www.cnblogs.com/zhangdongsheng/p/4490777.html