基础数学部分略去,按时间顺序记一些值得记录的点。
由于有大量已经学习过的知识,因此记录非常零碎。
英文单词学习
norm 范数 Euclidean norm 欧几里得范数(二范数) interpolant 插值
Gouraud Shading 和 Phong Shading Flat Shading是三大光照顶点着色法。
Barycentric weight 重心坐标权重 Tetrahedral 四面的 Particle-triangle Intersection 粒子三角交 symmetric 对称 Transpose 转置 Diagonal 对角
Orthogonal matrix 正交矩阵 matrix Transformation 正交矩阵 Symmetric Positive Detiniteness 对称正定性 (半正定加个semi-)
坐标系与零碎基础知识
左手系与右手系,判别依据在当手掌正放时,将大拇指与食指、中指称坐标系排列,大拇指所指方向为x轴正方向,食指所指方向为y轴正方向,中指所指方向为z轴正方向。
左手系同理。
使用右手系的有:OpenGL,左手系的有:Unity与DirectX。
左手系相对的优势在于他是根据电脑屏幕的位置来确定的,使用左手系能够保证所计算的值都为正数。
我们常用黑色粗体来表示一个向量,这是由于在计算机上这样比较方便美观。
点乘有三种常见的写法,分别为<a, b>, a·b,
a
T
b
a^Tb
aTb三种。
我们对线段上点的表示常有两种方法,分别为:
p
(
t
)
=
{
p
+
t
(
q
−
p
)
(
1
−
t
)
p
+
t
q
p(t) = \left\{ \begin{matrix} p+t\left ( q-p \right) \\ (1-t)p+tq \end{matrix} \right .
p(t)={p+t(q−p)(1−t)p+tq
下面这种插入点的方法常常被称为线性插值。
无穷范数的值就是他的最大值(自证不难)。
平面表示法
一个平面可以用它的法向量来进行表示。我们可以通过计算点与法向量形成向量的投影(点乘)来判断是否发生碰撞,这常用于碰撞检测。
同样的,如果是一个球,我们可以通过计算与球心的距离来判断碰撞。
计算碰撞发生的时间,比每个帧计算距离判断是否发生碰撞要节约大量资源。
叉乘不满足交换律,如果进行交换需要加上负号。
通过计算一点与三角形内任意两点形成向量的叉乘值点乘法向量n可以判断点是否在图形内,这需要满足四点共平面的前提条件。
这种插入点获取图形分割的方法被称为三角形插值。
三角形插值在Gouraud Shading 模型中有较多使用。
四面体的探讨
可以计算出四面体底面积为:
∣
∣
A
B
∗
A
C
∣
∣
2
\frac{||AB*AC||}{2}
2∣∣AB∗AC∣∣
高为:
A
P
⋅
A
B
∗
A
C
∣
∣
A
B
∗
A
C
∣
∣
AP·\frac{AB*AC}{||AB*AC||}
AP⋅∣∣AB∗AC∣∣AB∗AC
计算得:
V
=
1
6
A
C
⋅
A
B
∗
A
C
V = \frac{1}{6}AC·AB*AC
V=61AC⋅AB∗AC
或者可以表示为:
1
6
∣
B
C
P
A
1
1
1
1
∣
\frac{1}{6}|\begin{matrix}B & C & P & A\\ 1&1&1&1\end{matrix}|
61∣B1C1P1A1∣
注意体积是有正负的,如与体积平面法向量朝向相同,则为正,否则为负。
同理,我们可以由此计算出什么时候点将会与四面体发生碰撞。
基础公式依旧为:
(
p
(
t
)
−
x
A
)
⋅
x
A
B
∗
x
A
C
=
0
(p(t)-x_A)·x_{AB}*x_{AC} = 0
(p(t)−xA)⋅xAB∗xAC=0
计算出相应的t即可。
关键概念
Orthogonal matrix 正交矩阵(
A
A
−
1
=
I
AA^{-1}=I
AA−1=I)
满足
a
i
T
a
j
=
{
1
,
i
f
i
=
=
j
0
,
i
f
i
!
=
j
a_i^Ta_j=\left\{ \begin{matrix} 1, &if &i==j \\ 0, &if &i!=j \end{matrix}\right .
aiTaj={1,0,ififi==ji!=j
正定矩阵
奇异矩阵
特征矩阵
//待补充…