又是一个零碎知识点拼成的读书笔记,会持续细化更新的~
多坐标系
计算机在我前面还是后面:物体坐标系
书在我的东边还是西边:惯性坐标系
怎样从一个房间移动到另一个房间:世界坐标系
我能看见我的计算机吗:摄像机坐标系
向量
(1)一些概念
向量 & 标量
维度
向量的模:向量的长度或者大小
单位向量:大小为1的向量,也被叫做标准化向量、法线
(2)向量运算
1)距离公式:
2)点乘 & 叉乘:
点乘:结果是一个标量;表示两个向量之间的相似程度,点乘结果越大,向量越相近。
叉乘:结果是一个向量,得到的向量垂直于原来的两个向量,不满足交换律
矩阵
(1)概念
向量是标量的数组,矩阵是向量的数组
方阵:行数和列数相同
转置:对于任意矩阵,转置之后再转置就是原矩阵
(2)矩阵乘法
不满足交换律
满足结合律
(3)行向量和列向量
行向量左乘矩阵的时候,得到行向量
DirectX使用的是行向量,OpenGL使用的是列向量
推荐使用行向量:便于书写;左乘更符合人们的习惯
(4)矩阵的变换
方阵的行可以被解释为坐标系的基向量
零向量乘以任何矩阵都能得到零向量;所以变换不改变原点
(5)矩阵的线性变换
- 1)旋转
- 绕x轴旋转的公式
- 2)缩放
- 3)正交投影
- 4)镜像
- 5)切变
6)变换的类型
- 线性
- 仿射
- 可逆
- 等角
- 正交
- 刚体
(7)行列式
几何解释:以基向量为两边的平行四边形的有符号面积
(8)逆
一个矩阵和他的逆矩阵相乘的时候,结果等于单位矩阵
(9)正交矩阵
(10)矩阵的优缺点
优点:方便旋转;可以打破嵌套坐标系之间的关系,实现多个角位移连接;逆矩阵就是反角位移;API使用矩阵
缺点:占用了更多内存;不直观;可能有病态矩阵
欧拉角和四元数
欧拉角
定义方位,是三个旋转组成的序列。
最常用的约定:heading(绕y轴)-pitch(绕x轴)-bank(绕z轴)
顺序并不重要
优缺点:
- 优点:
- 和人们思维习惯一致
- 简洁,占用内存少
- 任何三个数都是合法的
- 缺点:
- 给定方位的表达不唯一,存在别名问题
- 两个角度之间求差值是很难的
万向锁
概念:当第二次旋转的角度是90度时,第一次和第三次的旋转轴时相同的
四元数
定义
优缺点:
- 优点:
- 平滑插值
- 快速连接和角位移求逆
- 和矩阵之间快速转换,比欧拉角快
- 占用内存比矩阵少
- 缺点:
- 可能不合法
- 比欧拉角大一些
- 难于使用
矩阵、欧拉角、四元数的比较
三种形式之间的转换
几何图元
概述
表现方式:
- 隐式
- 参数形式
- 直接行使
固有属性:自由度
AABB & OBB & 边界球
- AABB: Axis Aligned Bounding Box 轴对称矩形边界框;物体旋转的时候,AABB不会跟着旋转,但是会进行拉伸缩放
- OBB:Oriented Bounding Box 方向包围盒/有向包围盒;随着物体的旋转而旋转
三角形
重心坐标空间
特殊点
- 重心
- 内心
- 外心
几何检测(比较实用的重点)
碰撞检测
GJK算法
- 先验一个方向计算出两个多边形相距最远的顶点的差值;
- 再沿着反方向,计算差值;
- 如果差值同为正或者负,就是不相交的。
四叉树
假设一个区域只能放下4个物体,当放第5个的时候,将屏幕划分为四个区域;数量增加的时候依次类推;
插入待检测元素的时候和元素组中的对象进行检测。
图形数学
坐标空间
裁剪空间:标准视体空间
屏幕空间:对应于真正的屏幕像素