图形学基础复习之矩阵
2011-11-26 17:35
302 查看
这些基础知识非常重要,但是每次学习后都会很快忘记,所以在这里记录一下理解的过程,方便日后能快速进行复习
矩阵只是一套数学工具,本身没有特定含义,将原有问题套用矩阵的方式计算会使过程更方便更快捷,其实将矩阵的计算过程一项一项拆分出来,和正常处理原有问题的计算方式是相同的。
一、矩阵计算
1.矩阵乘法
进行矩阵乘法的两个矩阵一定要满足 A的行数 = b的列数
最后得到的是一个 A行数*B列数的一个方形矩阵
把矩阵的行阵想像成多维向量,全部分解为向量的计算
Cij = dot(ai,bj) i为行号 j为列号
A*B = a11 a12 a13 * b11 b12 =
a21 a22 a23 b21 b22
b31 b32
结果为2*2矩阵C =
dot( vector3(a11,a12,a13) , vector3(b11,b21,b31) ) dot( vector3(a11,a12,a13) , vector3(b12,b22,b32) )
dot( vector3(a21,a22,a23) , vector3(b11,b21,b31) ) dot( vector3(a21,a22,a23) , vector3(b12,b22,b32) )
2.逆矩阵
进行逆运算的矩阵必须是个方形矩阵
一个N*N的矩阵M 的逆矩阵表示为 M-1(-1在指数位)
3.矩阵的转置
转置 = 交换矩阵的行和列 m*n的矩阵转置后变成n*m
二、矩阵变换
同前面所序,空间变换矩阵只是借用了矩阵这一计算方式来方便的进行空间变换,并不神奇,一个简单的例子 x=5 y=5的坐标 各偏移50 就是x+50,y+50 而用矩阵方式变换
[5,5,1] * 1 0 0
0 1 0
50 50 1
= dot(vector3(5,5,1) , vector3(1,0,50)) , dot(vector3(5,5,1) , vector3(0,1,50))
= 5*1 + 5*0 + 1*50 , 5*0 + 5*5 + 1*50 (点乘 = x1*y1 + x2*y2+x3*y3)
= 5 + 50 , 5 + 50 (最终还是回归了正常计算偏移的公式)
再形象的说就是矩阵是一套很好用的工具让你传的几个参数,以上平移变换就是传了9个参数进去,就可以得出平移结果,而这9个参数即是矩阵 不同功能的矩阵要传不同的参数进去,矩阵本身没有特定含义
1.平移变换矩阵
T(p) =
1 0 0 0
0 1 0 0
0 0 1 0
X Y Z 1
2.旋转变换
X(θ) =
1 0 0 0
0 cosθ sinθ 0
0 -sinθ cosθ 0
0 0 0 1
Y(θ) =
cosθ 0 -sinθ 0
0 1 0 0
sinθ 0 cosθ 0
0 0 0 1
Z(θ)=
cosθ sinθ 0 0
-sinθ cosθ 0 0
0 0 1 0
0 0 0 1
其实Z轴变换矩阵,去掉最后一行和最后一列即是二维中的旋转变换
3.缩放变换
S(q) =
qx 0 0 0
0 qy 0 0
0 0 qz 0
0 0 0 1
注:切线空间其实就是把3d模型身上的纹理皮,扒下来平铺成平面的,他基于的坐标系 normal全是朝上的,如果这张皮在重新蒙在模型上的时候,就得进行切线空间到世界空间矩阵的变换
注:因为矩阵运算不符合乘法交换率 M1*M2 != M2*M1 矩阵之间相乘的顺序得到的变换效果是不同的,并且矩阵分为行矩阵和列矩阵, 他们对于矩阵在乘法的左右位置也是不相同的 dx 与opengl默认的行列矩阵也是不相同的 在写通用渲染器时要将他们设成相同的矩阵类型,例如统一使用行矩阵
矩阵只是一套数学工具,本身没有特定含义,将原有问题套用矩阵的方式计算会使过程更方便更快捷,其实将矩阵的计算过程一项一项拆分出来,和正常处理原有问题的计算方式是相同的。
一、矩阵计算
1.矩阵乘法
进行矩阵乘法的两个矩阵一定要满足 A的行数 = b的列数
最后得到的是一个 A行数*B列数的一个方形矩阵
把矩阵的行阵想像成多维向量,全部分解为向量的计算
Cij = dot(ai,bj) i为行号 j为列号
A*B = a11 a12 a13 * b11 b12 =
a21 a22 a23 b21 b22
b31 b32
结果为2*2矩阵C =
dot( vector3(a11,a12,a13) , vector3(b11,b21,b31) ) dot( vector3(a11,a12,a13) , vector3(b12,b22,b32) )
dot( vector3(a21,a22,a23) , vector3(b11,b21,b31) ) dot( vector3(a21,a22,a23) , vector3(b12,b22,b32) )
2.逆矩阵
进行逆运算的矩阵必须是个方形矩阵
一个N*N的矩阵M 的逆矩阵表示为 M-1(-1在指数位)
3.矩阵的转置
转置 = 交换矩阵的行和列 m*n的矩阵转置后变成n*m
二、矩阵变换
同前面所序,空间变换矩阵只是借用了矩阵这一计算方式来方便的进行空间变换,并不神奇,一个简单的例子 x=5 y=5的坐标 各偏移50 就是x+50,y+50 而用矩阵方式变换
[5,5,1] * 1 0 0
0 1 0
50 50 1
= dot(vector3(5,5,1) , vector3(1,0,50)) , dot(vector3(5,5,1) , vector3(0,1,50))
= 5*1 + 5*0 + 1*50 , 5*0 + 5*5 + 1*50 (点乘 = x1*y1 + x2*y2+x3*y3)
= 5 + 50 , 5 + 50 (最终还是回归了正常计算偏移的公式)
再形象的说就是矩阵是一套很好用的工具让你传的几个参数,以上平移变换就是传了9个参数进去,就可以得出平移结果,而这9个参数即是矩阵 不同功能的矩阵要传不同的参数进去,矩阵本身没有特定含义
1.平移变换矩阵
T(p) =
1 0 0 0
0 1 0 0
0 0 1 0
X Y Z 1
2.旋转变换
X(θ) =
1 0 0 0
0 cosθ sinθ 0
0 -sinθ cosθ 0
0 0 0 1
Y(θ) =
cosθ 0 -sinθ 0
0 1 0 0
sinθ 0 cosθ 0
0 0 0 1
Z(θ)=
cosθ sinθ 0 0
-sinθ cosθ 0 0
0 0 1 0
0 0 0 1
其实Z轴变换矩阵,去掉最后一行和最后一列即是二维中的旋转变换
3.缩放变换
S(q) =
qx 0 0 0
0 qy 0 0
0 0 qz 0
0 0 0 1
注:切线空间其实就是把3d模型身上的纹理皮,扒下来平铺成平面的,他基于的坐标系 normal全是朝上的,如果这张皮在重新蒙在模型上的时候,就得进行切线空间到世界空间矩阵的变换
注:因为矩阵运算不符合乘法交换率 M1*M2 != M2*M1 矩阵之间相乘的顺序得到的变换效果是不同的,并且矩阵分为行矩阵和列矩阵, 他们对于矩阵在乘法的左右位置也是不相同的 dx 与opengl默认的行列矩阵也是不相同的 在写通用渲染器时要将他们设成相同的矩阵类型,例如统一使用行矩阵
相关文章推荐
- [置顶] Unity关于图形学基础知识-矩阵的逆(七)
- [置顶] unity中关于图形学基础知识—矩阵与转换(三)
- [置顶] Unity中关于图形学的基础知识—矩阵(二)
- [置顶] Unity关于图形学基础-矩阵的行列式(六)
- 一步一步复习数据结构和算法基础-稀疏矩阵基本操作
- 图形学基础 bizier 理论复习
- [置顶] unity关于图形学的基础知识-3D矩阵的变换(四)
- 深度学习/机器学习入门基础数学知识整理(一):线性代数基础,矩阵,范数等
- 矩阵快速幂--最基础的算法,最详细的注释
- MySQL学习笔记_8_SQL语言基础复习
- 图形学相关的一些数学基础书
- 黑马程序员--JAVA基础复习之多线程(二)线程安全与解决方法
- java基础复习之《异常体系》
- matlab矩阵基础
- OpenGL中投影矩阵基础知识
- 电子电路基础复习 —— 电阻
- 矩阵基础 (1). 行优先和列优先的问题
- 3D 图形编程的数学基础(3) 矩阵基本变换
- 3D数学基础--矩阵扩展
- matlab矩阵基础运算