《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.
 
《3D数学基础:图形与游戏开发》 学习笔记(一)

《3D数学基础:图形与游戏开发》 学习笔记(一)

《3D数学基础:图形与游戏开发》 学习笔记(一)

代表顺时针旋转90度,想象L形

12.【极分解】
将一个矩阵A分解为  A = UP.
连续介质力学中使用极分解来将形变分解成拉伸和旋转的部分,其中P表示拉伸的部分,U表示旋转的部分。

13.【3个向量的交叉积】
 《3D数学基础:图形与游戏开发》 学习笔记(一)
14.【行列式的重要性质】
 《3D数学基础:图形与游戏开发》 学习笔记(一)
《3D数学基础:图形与游戏开发》 学习笔记(一)
2D中,行列式等于以基向量为两边的平行四边形的有符号面积。如果平行四边形相对于原来的方位“翻转”,那么面积变负。
3D中,行列式相对应的则为平行六面体的有符号体积,如果变换使得六面体“由里向外”翻转,则负。
行列式的绝对值与面积、体积的改变相关。
如果行列式为0,那么该矩阵一定包含投影。

如果行列式为负,那么该矩阵包含镜像。

《3D数学基础:图形与游戏开发》 学习笔记(一)

 
15.【利用4D矩阵同时表示旋转和平移】齐次坐标
《3D数学基础:图形与游戏开发》 学习笔记(一)
4D坐标的w分量可以开关是否平移(对无穷远点平移没有用,相当于没平移)
 《3D数学基础:图形与游戏开发》 学习笔记(一)
16.【绕不在原点的轴/平面进行旋转】
基本思想,先乘T将轴平移到“原点”,之后乘R转动矩阵,最后乘T的逆(T^-1),即为结果。
即 v_new = v TR(T^-1)
(p·R可以理解为扇形的弦长,如此便构造出来旋转+平移的4D仿射矩阵)

 《3D数学基础:图形与游戏开发》 学习笔记(一)
《3D数学基础:图形与游戏开发》 学习笔记(一)
《3D数学基础:图形与游戏开发》 学习笔记(一)
 
 
17.【透视投影】
 《3D数学基础:图形与游戏开发》 学习笔记(一)


18.【四元数!!!】
因为欧拉角一些固有的数学原因,导致“万向锁”的出现,但是,四元数就不会导致这个问题了!!

 《3D数学基础:图形与游戏开发》 学习笔记(一)
 《3D数学基础:图形与游戏开发》 学习笔记(一)
 《3D数学基础:图形与游戏开发》 学习笔记(一)
四元数能够被解释为“轴-对”的形式,“n-θ”格式,n为任意的旋转轴,θ为旋转角度。
记住,ij=k,而不是0!

 《3D数学基础:图形与游戏开发》 学习笔记(一)

四元数求负与原四元数表示的角位移是一样的,因为:
cos((θ+360)/2) = cos (θ/2 +180) = - cos (θ/2)
【四元数叉乘
 《3D数学基础:图形与游戏开发》 学习笔记(一)

 《3D数学基础:图形与游戏开发》 学习笔记(一)

《3D数学基础:图形与游戏开发》 学习笔记(一)

 《3D数学基础:图形与游戏开发》 学习笔记(一)
19.Matrix 4x3类
 
《3D数学基础:图形与游戏开发》 学习笔记(一)
20. 3D射线
射线就是有向线段

 《3D数学基础:图形与游戏开发》 学习笔记(一)

3D射线是对2D射线的一个扩展,只要再加上z(t) = z0 + t Δz即可。 其中Δx= x1-x0(x0是起点)
向量形式的表示:

 

《3D数学基础:图形与游戏开发》 学习笔记(一)

在一些相交性检测中,可能会使用上述形式的一种变体,d为单位向量,t从0变化到L,L是射线的长度。

21.点到直线的距离公式:
 《3D数学基础:图形与游戏开发》 学习笔记(一)

22.【第12章——几何图元课后习题】(思路)

 《3D数学基础:图形与游戏开发》 学习笔记(一)

a.  平面方程,先由叉乘算出法向量n, 再根据n · p = d,算出d,之后便得平面方程。
b. 计算点到平面的有符号距离 l =n · q - d ,若l>0,则是正面,否则为反面.
c. 同上,l的绝对值即为.
d. 此处可选择用投影法,即舍弃n 中最大的分量对应的坐标,再在投影平面进行计算重心坐标。
  或者,根据三个子三角形与三角形有符号面积之比进行计算。
e. 这三个心都有对应的公式进行计算。