3D数学基础:坐标系
坐标系: 1.模型坐标系
2.世界坐标系
3.摄像机坐标系
4.屏幕坐标系
从模型到屏幕需要3个变换
1.模型到世界
2.世界到摄像机
3.摄像机到屏幕
3个变换的综合变换 称之为 MVP
向量:
1.向量
向量既有大小也有方向,没有位置的概念,大小就是向量的长度。一般从远点算起。
标量 只有大小 没有方向。
向量有 2D向量:(x,y)
3D向量: (x,y,z)
4D向量: (x,y,z,w)
2.向量的运算
向量的加法:v1 = (x1,y1)
v2 = (x2,y2)
v3 = v1+v2=(x1+x2,y1+y2)
向量的减法: v3 = v2-v1 =(x2-x1,y2-y1) 得到 v1指向v2的向量
向量和标量乘法: v = (x,y,z)
d = 2
R = v*d = (2x,2y,2z) 得到的向量方向跟v相同 长度是v的d倍
向量的规范化:就是向量的每个分量 / 向量的长度(模长)
已知向量的分量 求向量的长度 v = (x,y)
d = x的平方+ y的平方 再开平方
3.向量的点积
2D向量
v1 = (x1,y1)
v2 = (x2,y2)
dot(v1,v2) = v1*v2 = (x1*y1+x2*y2) =d
3D向量道理相同 无非就是多了个z分量 继续加一起就好
得到的是一个标量值
dot(v1,v2) =v1 * v2 = ||v1||*||v2||*cos(a) v1的长度*v2的长度*夹角的余玄值
当v1 和 v2 都是规范化向量的时候
dot(v1,v2) = cos(a) 就直接等于夹角的余玄值
如果 dot(v1,v2) = 0.5
那么 cos(a) = 0.5
a = acos(0.5)
a = 60度
如果 dot(v1,v2)= 1
那么 a = acos(1)
a = 0度
几何意义: 两个向量的夹角越小 得到的值越大 夹角越大 得到的值越小
4.向量的叉积
v1 =(1,0,0)
v2 =(0,1,0)
几何意义:得出垂直于v1与v2形成的平面的向量 顺序不一样 会得到的不同的向量 虽然都是垂直
但是方向会相反
矩阵
1.矩阵维度和记法
3x2矩阵 3x3矩阵
2.矩阵的转置
就是把矩阵的行变为列
为什么要转置?目的是什么? 早知道就没那么多疑问了,因为好奇,去查了一下,本来就一个问题不懂,
突然变成几十个问题,瞬间心情不好了。。。。
向量也可以当作矩阵来用 也可以转置 平时说的行向量 列向量 是用矩阵的概念在描述向量
3.矩阵和标量的乘法
4.矩阵和矩阵的乘法
第一行*第一列 第一行*第二列 第一行*第三列
第二行*第一列 第二行*第二列 第二行*第三列
第三行*第一列 第三行*第二列 第三行*第三列
矩阵与矩阵的乘法是有顺序的 如果换下顺序 结果是不一样的
矩阵与矩阵的乘法 第一个矩阵的行的元素个数需要跟第二个矩阵的列的元素个数相同 不然是不能相乘的
mul乘法函数
mul(m,v) m矩阵 v向量
mul(v,m)
虽然矩阵乘法有顺序 但是这个函数是可以调换位置 结果相同
5.单位矩阵
特点:单位矩阵乘以任何矩阵或者任何向量 不会改变这个矩阵与向量
矩阵和变换
1.2D旋转矩阵
绕坐标中心旋转a角度
a不是角度 而是0-2pi的范围 是弧度 想旋转角度 需要由度数跟弧度之间的转换
2Pi = 360度
4.3D平移(4x4矩阵)
4.3D旋转矩阵
x y z
5.3D旋转+平移
6.3D缩放矩阵
真正投影到屏幕上的 只有x y
需要做的是透视的 用 x y 除以第四个分量z/d 舍弃z值
如果平行的 用 x y 不需要除
8.变换的种类
旋转 缩放 平移 镜像 切变
投影(平行投影) 投影(透视投影)
可逆 等角 正交 刚体
线性变换 仿射变换
坐标系: 1.模型坐标系
2.世界坐标系
3.摄像机坐标系
4.屏幕坐标系
从模型到屏幕需要3个变换
1.模型到世界
2.世界到摄像机
3.摄像机到屏幕
3个变换的综合变换 称之为 MVP
向量:
1.向量
向量既有大小也有方向,没有位置的概念,大小就是向量的长度。一般从远点算起。
标量 只有大小 没有方向。
向量有 2D向量:(x,y)
3D向量: (x,y,z)
4D向量: (x,y,z,w)
2.向量的运算
向量的加法:v1 = (x1,y1)
v2 = (x2,y2)
v3 = v1+v2=(x1+x2,y1+y2)
向量的减法: v3 = v2-v1 =(x2-x1,y2-y1) 得到 v1指向v2的向量
向量和标量乘法: v = (x,y,z)
d = 2
R = v*d = (2x,2y,2z) 得到的向量方向跟v相同 长度是v的d倍
向量的规范化:就是向量的每个分量 / 向量的长度(模长)
已知向量的分量 求向量的长度 v = (x,y)
d = x的平方+ y的平方 再开平方
3.向量的点积
2D向量
v1 = (x1,y1)
v2 = (x2,y2)
dot(v1,v2) = v1*v2 = (x1*y1+x2*y2) =d
3D向量道理相同 无非就是多了个z分量 继续加一起就好
得到的是一个标量值
dot(v1,v2) =v1 * v2 = ||v1||*||v2||*cos(a) v1的长度*v2的长度*夹角的余玄值
当v1 和 v2 都是规范化向量的时候
dot(v1,v2) = cos(a) 就直接等于夹角的余玄值
如果 dot(v1,v2) = 0.5
那么 cos(a) = 0.5
a = acos(0.5)
a = 60度
如果 dot(v1,v2)= 1
那么 a = acos(1)
a = 0度
几何意义: 两个向量的夹角越小 得到的值越大 夹角越大 得到的值越小
4.向量的叉积
v1 =(1,0,0)
v2 =(0,1,0)
几何意义:得出垂直于v1与v2形成的平面的向量 顺序不一样 会得到的不同的向量 虽然都是垂直
但是方向会相反
矩阵
1.矩阵维度和记法
3x2矩阵 3x3矩阵
2.矩阵的转置
就是把矩阵的行变为列
为什么要转置?目的是什么? 早知道就没那么多疑问了,因为好奇,去查了一下,本来就一个问题不懂,
突然变成几十个问题,瞬间心情不好了。。。。
向量也可以当作矩阵来用 也可以转置 平时说的行向量 列向量 是用矩阵的概念在描述向量
3.矩阵和标量的乘法
4.矩阵和矩阵的乘法
第一行*第一列 第一行*第二列 第一行*第三列
第二行*第一列 第二行*第二列 第二行*第三列
第三行*第一列 第三行*第二列 第三行*第三列
矩阵与矩阵的乘法是有顺序的 如果换下顺序 结果是不一样的
矩阵与矩阵的乘法 第一个矩阵的行的元素个数需要跟第二个矩阵的列的元素个数相同 不然是不能相乘的
mul乘法函数
mul(m,v) m矩阵 v向量
mul(v,m)
虽然矩阵乘法有顺序 但是这个函数是可以调换位置 结果相同
5.单位矩阵
特点:单位矩阵乘以任何矩阵或者任何向量 不会改变这个矩阵与向量
矩阵和变换
1.2D旋转矩阵
绕坐标中心旋转a角度
a不是角度 而是0-2pi的范围 是弧度 想旋转角度 需要由度数跟弧度之间的转换
2Pi = 360度
2.2D缩放矩阵
沿坐标轴缩放 沿任意N轴缩放
Nx指那个N向量的一个分量 K为缩放因子
3. 2D平移(3x3)4.3D平移(4x4矩阵)
4.3D旋转矩阵
x y z
5.3D旋转+平移
6.3D缩放矩阵
7.透视投影矩阵
真正投影到屏幕上的 只有x y
需要做的是透视的 用 x y 除以第四个分量z/d 舍弃z值
如果平行的 用 x y 不需要除
8.变换的种类
旋转 缩放 平移 镜像 切变
投影(平行投影) 投影(透视投影)
可逆 等角 正交 刚体
线性变换 仿射变换