《3D数学基础:图形与游戏开发》 学习笔记(一)
(以下学习笔记为本人最近在学习本书的时候所记载,之中还加入了一些做项目过程中遇到的问题,以及相关知识的补充。笔者水平有限,文中不足之处,还请给予指正,谢谢~)
1.将左手坐标系变换到右手坐标系,只需改变其中一个轴的方向即可。
若改变两个轴的方向,则与旋转坐标轴无异。
左手坐标系有24种(4*2*3) ,右手坐标系也有24种。
2.四种坐标系:物体坐标系、世界坐标系、惯性坐标系、摄像机坐标系
3.点的平移、旋转方向 始终与 轴相反。(比如开车向前,世界向后;您向右转,世界向左转)
4.向量箭头,箭头是“尾”,箭末是“头” 向量有大小和方向,但是没有位置
5.AABB包围盒: 从一个点(x,y,z)到另一个点(x2,y2,z2)的沿坐标轴的不同路径走法,构成了AABB包围盒。
6.向量点乘的几何意义: 向量点乘结果越大,则两个向量越“接近”,越相似。
零向量与任何其他向量都垂直。
a·bxc称为三重积。
7.向量叉乘的几何意义: 向量叉乘的大小axb =|a||b|sinθ,等于以a和b为边的平行四边形的面积大小。
向量叉乘方向的判断,在左手坐标系中用左手,右手坐标系中用有右手,两个坐标系刚好相反。
将向量变成头尾相接来判断。如axb,则a的头接到b的尾。
8. 保持向量类的简单性,需要表达式调用的函数,比如叉积x,应该定义成非成员函数。
不需要在向量类上做过多的优化,不要为了5%的提升而牺牲100%的代码复杂性。
9.向量可表示为基向量组的线性求和。
10. 2D中想象矩阵的方法,就是将矩阵的每一行抽取出来,当作一个个基向量,在2D笛卡尔平面上画出2条,成"L形"状,从而便可以得知矩阵所进行的变换类型。
如|2 1|
|-1 2| 就是对应将坐标系逆时针旋转26度(arcsin(1/根号5))
矩阵的每一行都可以是变换后的基向量。
平行四边形,又称为“旋转盒”,不仅旋转,还会拉伸。
拉伸倍数根据对应的行向量的模长决定(列向量右乘时,即变成列向量的模长)
11.
12.【极分解】
将一个矩阵A分解为 A = UP.
连续介质力学中使用极分解来将形变分解成拉伸和旋转的部分,其中P表示拉伸的部分,U表示旋转的部分。
13.【3个向量的交叉积】
14.【行列式的重要性质】
2D中,行列式等于以基向量为两边的平行四边形的有符号面积。如果平行四边形相对于原来的方位“翻转”,那么面积变负。
3D中,行列式相对应的则为平行六面体的有符号体积,如果变换使得六面体“由里向外”翻转,则负。
行列式的绝对值与面积、体积的改变相关。
如果行列式为0,那么该矩阵一定包含投影。
如果行列式为负,那么该矩阵包含镜像。
15.【利用4D矩阵同时表示旋转和平移】齐次坐标
4D坐标的w分量可以开关是否平移(对无穷远点平移没有用,相当于没平移)
16.【绕不在原点的轴/平面进行旋转】
基本思想,先乘T将轴平移到“原点”,之后乘R转动矩阵,最后乘T的逆(T^-1),即为结果。
即 v_new = v TR(T^-1)
(p·R可以理解为扇形的弦长,如此便构造出来旋转+平移的4D仿射矩阵)
17.【透视投影】
18.【四元数!!!】
因为欧拉角一些固有的数学原因,导致“万向锁”的出现,但是,四元数就不会导致这个问题了!!
四元数能够被解释为“轴-对”的形式,“n-θ”格式,n为任意的旋转轴,θ为旋转角度。
记住,ij=k,而不是0!
cos((θ+360)/2) = cos (θ/2 +180) = - cos (θ/2)
【四元数叉乘】
19.Matrix 4x3类
20. 3D射线
射线就是有向线段
向量形式的表示:
21.点到直线的距离公式:
22.【第12章——几何图元课后习题】(思路)
b. 计算点到平面的有符号距离 l =n · q - d ,若l>0,则是正面,否则为反面.
c. 同上,l的绝对值即为.
d. 此处可选择用投影法,即舍弃n 中最大的分量对应的坐标,再在投影平面进行计算重心坐标。
或者,根据三个子三角形与三角形有符号面积之比进行计算。
e. 这三个心都有对应的公式进行计算。