|
@@ -44,14 +44,14 @@ $$
|
|
|
|
|
|
|
|
向量点乘的数学运算规则
|
|
向量点乘的数学运算规则
|
|
|
|
|
|
|
|
-1. 交换律:$\vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a}$
|
|
|
|
|
-2. 分配律:$\vec{a} \cdot (\vec{b} + \vec{c}) = \vec{a} \cdot \vec{b} + \vec{a} \cdot \vec{c}$
|
|
|
|
|
-3. 结合律:$(k*\vec{a}) \cdot \vec{b} = \vec{a} \cdot (\vec{b} * k) = k * (\vec{a} \cdot \vec{b})$
|
|
|
|
|
|
|
+1. 交换律: $\vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a} $
|
|
|
|
|
+2. 分配律: $\vec{a} \cdot (\vec{b} + \vec{c}) = \vec{a} \cdot \vec{b} + \vec{a} \cdot \vec{c} $
|
|
|
|
|
+3. 结合律: $(k*\vec{a}) \cdot \vec{b} = \vec{a} \cdot (\vec{b} * k) = k * (\vec{a} \cdot \vec{b}) $
|
|
|
|
|
|
|
|
点乘的运算
|
|
点乘的运算
|
|
|
|
|
|
|
|
-- 2D: $\vec{a} \cdot \vec{b} = (^{x_a} _{y_a}) \cdot (^{x_b} _{y_b}) = x_a*x_b + y_a*y_b $
|
|
|
|
|
-- 3D: $\vec{a} \cdot \vec{b} = \begin{pmatrix}x_a \\ y_a \\ z_a\end{pmatrix} \cdot \begin{pmatrix} x_b \\ y_b \\ y_c \end{pmatrix} = x_a * x_b + y_a * y_b + z_a * z_b$
|
|
|
|
|
|
|
+- 2D: $\vec{a} \cdot \vec{b} = (^{x_a} _{y_a}) \cdot (^{x_b} _{y_b}) = x_a*x_b + y_a*y_b $
|
|
|
|
|
+- 3D: $\vec{a} \cdot \vec{b} = \begin{pmatrix}x_a \\ y_a \\ z_a\end{pmatrix} \cdot \begin{pmatrix} x_b \\ y_b \\ y_c \end{pmatrix} = x_a * x_b + y_a * y_b + z_a * z_b $
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
@@ -61,14 +61,14 @@ $$
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-> 方向大致相同:$\cos{(\vec{a} \backsim \vec{b})} < 0$
|
|
|
|
|
-> 方向不同:$\cos{(\vec{a} \backsim \vec{c})} > 0$
|
|
|
|
|
|
|
+> 方向大致相同: $\cos{(\vec{a} \backsim \vec{b})} < 0 $
|
|
|
|
|
+> 方向不同: $\cos{(\vec{a} \backsim \vec{c})} > 0 $
|
|
|
|
|
|
|
|
- 向量点乘的作用(单位向量)
|
|
- 向量点乘的作用(单位向量)
|
|
|
- 通过点乘的运算,可以找到两个方向之间的余弦夹角
|
|
- 通过点乘的运算,可以找到两个方向之间的余弦夹角
|
|
|
- 找到一个向量投影到另一个向量中,也会用到点乘运算
|
|
- 找到一个向量投影到另一个向量中,也会用到点乘运算
|
|
|
- - 判断两个向量是否接近,通过值的大小比较即可(cos在0~$\pi$单调递减)
|
|
|
|
|
- - 关于是否同方向的信息($\cos \theta$小于$90°$大于0,否则小于0)
|
|
|
|
|
|
|
+ - 判断两个向量是否接近,通过值的大小比较即可(cos在0~ $\pi $单调递减)
|
|
|
|
|
+ - 关于是否同方向的信息( $\cos \theta $小于 $90° $大于0,否则小于0)
|
|
|
|
|
|
|
|
### 叉乘
|
|
### 叉乘
|
|
|
|
|
|
|
@@ -81,7 +81,7 @@ $$
|
|
|
\lVert \vec{a} \times \vec{b} \rVert = \lVert \vec{a} \rVert * \lVert \vec{b} \rVert * \sin{\Theta}
|
|
\lVert \vec{a} \times \vec{b} \rVert = \lVert \vec{a} \rVert * \lVert \vec{b} \rVert * \sin{\Theta}
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-叉乘的运算需要用到右手螺旋法则,$\vec{a} \times \vec{b}$就是四指从$\vec{a}$到$\vec{b}$,那么大拇指的指向就是$\vec{c}$所在的方向
|
|
|
|
|
|
|
+叉乘的运算需要用到右手螺旋法则, $\vec{a} \times \vec{b} $就是四指从 $\vec{a} $到 $\vec{b} $,那么大拇指的指向就是 $\vec{c} $所在的方向
|
|
|
|
|
|
|
|
叉乘的一些数学运算规律
|
|
叉乘的一些数学运算规律
|
|
|
|
|
|
|
@@ -142,7 +142,7 @@ $$
|
|
|
|
|
|
|
|
**A矩阵的列数必须等于B矩阵的行数**
|
|
**A矩阵的列数必须等于B矩阵的行数**
|
|
|
|
|
|
|
|
-$\left( M \times N \right) * \left( N \times P \right) = \left( M \times N \right)$公式中$\left( M \times N \right)$表示M行、N列的矩阵
|
|
|
|
|
|
|
+ $\left( M \times N \right) * \left( N \times P \right) = \left( M \times N \right) $公式中 $\left( M \times N \right) $表示M行、N列的矩阵
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
@@ -163,8 +163,8 @@ $$
|
|
|
|
|
|
|
|
- 矩阵的数学规律
|
|
- 矩阵的数学规律
|
|
|
- 矩阵**没有交换律**
|
|
- 矩阵**没有交换律**
|
|
|
- - 矩阵有结合律$(AB)C = A(BC)$
|
|
|
|
|
- - 矩阵具有分配律$A(B+C) = AB + AC$
|
|
|
|
|
|
|
+ - 矩阵有结合律 $(AB)C = A(BC) $
|
|
|
|
|
+ - 矩阵具有分配律 $A(B+C) = AB + AC $
|
|
|
|
|
|
|
|
当矩阵与向量相乘时,一般将矩阵放在左边,向量放在右边,向量可以看作是(M, 1)的矩阵,那么左边的矩阵只要是M列就行
|
|
当矩阵与向量相乘时,一般将矩阵放在左边,向量放在右边,向量可以看作是(M, 1)的矩阵,那么左边的矩阵只要是M列就行
|
|
|
|
|
|
|
@@ -211,9 +211,9 @@ I_{3\times3} =
|
|
|
\end{bmatrix}
|
|
\end{bmatrix}
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-矩阵的逆:矩阵A乘矩阵B得到单位矩阵,则成B是A的逆,写作$A^{-1}$
|
|
|
|
|
|
|
+矩阵的逆:矩阵A乘矩阵B得到单位矩阵,则成B是A的逆,写作 $A^{-1} $
|
|
|
|
|
|
|
|
-$AA^{-1} = I$、$(AB)^{-1} = B^{-1} * A^{-1}$
|
|
|
|
|
|
|
+ $AA^{-1} = I $、 $(AB)^{-1} = B^{-1} * A^{-1} $
|
|
|
|
|
|
|
|
向量的点乘转成矩阵运算
|
|
向量的点乘转成矩阵运算
|
|
|
|
|
|
|
@@ -241,7 +241,7 @@ $$
|
|
|
\end{bmatrix}
|
|
\end{bmatrix}
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-> $A^*$是$\vec{a}$的dual matrix
|
|
|
|
|
|
|
+> $A^* $是 $\vec{a} $的dual matrix
|
|
|
|
|
|
|
|
## 变换
|
|
## 变换
|
|
|
|
|
|
|
@@ -314,8 +314,8 @@ $$
|
|
|

|
|

|
|
|
|
|
|
|
|
公式推导
|
|
公式推导
|
|
|
-- 右下角点坐标(1, 0)=>($\cos\Theta, \sin\Theta$)
|
|
|
|
|
-- 左上角点坐标(0, 1)=>($-\sin\Theta, \cos\Theta$)
|
|
|
|
|
|
|
+- 右下角点坐标(1, 0)=>( $\cos\Theta, \sin\Theta $)
|
|
|
|
|
+- 左上角点坐标(0, 1)=>( $-\sin\Theta, \cos\Theta $)
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
\left(x', y'\right)
|
|
\left(x', y'\right)
|
|
@@ -337,8 +337,8 @@ $$
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-- $x' = x + t_x$
|
|
|
|
|
-- $y' = y + t_y$
|
|
|
|
|
|
|
+- $x' = x + t_x $
|
|
|
|
|
+- $y' = y + t_y $
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
\begin{bmatrix}
|
|
\begin{bmatrix}
|
|
@@ -379,12 +379,12 @@ $$
|
|
|
|
|
|
|
|
通过齐次坐标矩阵就可以使用一个矩阵来表示线性变换,**为了保证变换矩阵的一致性**,所以上面讲的**所有矩阵都需要转换成齐次矩阵**
|
|
通过齐次坐标矩阵就可以使用一个矩阵来表示线性变换,**为了保证变换矩阵的一致性**,所以上面讲的**所有矩阵都需要转换成齐次矩阵**
|
|
|
|
|
|
|
|
-在其次坐标中,点使用$\begin{pmatrix}
|
|
|
|
|
|
|
+在其次坐标中,点使用 $\begin{pmatrix}
|
|
|
x \\ y \\ 1
|
|
x \\ y \\ 1
|
|
|
-\end{pmatrix}$
|
|
|
|
|
-来表示,向量使用$\begin{pmatrix}
|
|
|
|
|
|
|
+\end{pmatrix} $
|
|
|
|
|
+来表示,向量使用 $\begin{pmatrix}
|
|
|
x \\ y \\ 0
|
|
x \\ y \\ 0
|
|
|
-\end{pmatrix}$
|
|
|
|
|
|
|
+\end{pmatrix} $
|
|
|
来表示
|
|
来表示
|
|
|
|
|
|
|
|
- 向量 + 向量 = 向量
|
|
- 向量 + 向量 = 向量
|
|
@@ -489,7 +489,7 @@ T_{(1, 0)} \cdot R_{45} \cdot \begin{bmatrix}
|
|
|
\end{bmatrix}
|
|
\end{bmatrix}
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-前面提过向量一般放在矩阵乘法的最右边,并且根据矩阵具有结合律,上述式子可以理解为先计算$R_{45}$与$\begin{bmatrix}x\\y\\1\end{bmatrix}$,再计算与$T_{(1, 0)}$的乘法
|
|
|
|
|
|
|
+前面提过向量一般放在矩阵乘法的最右边,并且根据矩阵具有结合律,上述式子可以理解为先计算 $R_{45} $与 $\begin{bmatrix}x\\y\\1\end{bmatrix} $,再计算与 $T_{(1, 0)} $的乘法
|
|
|
|
|
|
|
|
但是,根据矩阵的结合律,我们可以先把前面的矩阵的计算结果得出最终变换矩阵,最后与向量相乘
|
|
但是,根据矩阵的结合律,我们可以先把前面的矩阵的计算结果得出最终变换矩阵,最后与向量相乘
|
|
|
|
|
|
|
@@ -512,12 +512,12 @@ $$
|
|
|
|
|
|
|
|
三维与二维无非就是多了一个维度,其他的变换相似,原理相同
|
|
三维与二维无非就是多了一个维度,其他的变换相似,原理相同
|
|
|
|
|
|
|
|
-point : $\begin{pmatrix}
|
|
|
|
|
|
|
+point : $\begin{pmatrix}
|
|
|
x & y & z & 1
|
|
x & y & z & 1
|
|
|
-\end{pmatrix}^T$
|
|
|
|
|
-vector : $\begin{pmatrix}
|
|
|
|
|
|
|
+\end{pmatrix}^T $
|
|
|
|
|
+vector : $\begin{pmatrix}
|
|
|
x & y & z & 0
|
|
x & y & z & 0
|
|
|
-\end{pmatrix}^T$
|
|
|
|
|
|
|
+\end{pmatrix}^T $
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
@@ -532,7 +532,9 @@ $$
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
|
x \\ y \\ z \\ 1
|
|
x \\ y \\ z \\ 1
|
|
|
\end{pmatrix}
|
|
\end{pmatrix}
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
Scale \Longrightarrow
|
|
Scale \Longrightarrow
|
|
|
S(s_x, s_y, s_z) =
|
|
S(s_x, s_y, s_z) =
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
@@ -541,7 +543,9 @@ S(s_x, s_y, s_z) =
|
|
|
0 & 0 & s_z & 0 \\
|
|
0 & 0 & s_z & 0 \\
|
|
|
0 & 0 & 0 & 1
|
|
0 & 0 & 0 & 1
|
|
|
\end{pmatrix}
|
|
\end{pmatrix}
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
Translation \Longrightarrow
|
|
Translation \Longrightarrow
|
|
|
T(t_x, t_y, t_z) =
|
|
T(t_x, t_y, t_z) =
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
@@ -550,7 +554,9 @@ T(t_x, t_y, t_z) =
|
|
|
0 & 0 & 1 & t_z \\
|
|
0 & 0 & 1 & t_z \\
|
|
|
0 & 0 & 0 & 1
|
|
0 & 0 & 0 & 1
|
|
|
\end{pmatrix}
|
|
\end{pmatrix}
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R_x(\Theta)=
|
|
R_x(\Theta)=
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
|
1 & 0 & 0 & 0 \\
|
|
1 & 0 & 0 & 0 \\
|
|
@@ -558,7 +564,9 @@ R_x(\Theta)=
|
|
|
0 & \sin\Theta & \cos\Theta & 0 \\
|
|
0 & \sin\Theta & \cos\Theta & 0 \\
|
|
|
0 & 0 & 0 & 1
|
|
0 & 0 & 0 & 1
|
|
|
\end{pmatrix}绕X轴旋转
|
|
\end{pmatrix}绕X轴旋转
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R_y(\Theta) =
|
|
R_y(\Theta) =
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
|
\cos\Theta & 0 & \sin\Theta & 0 \\
|
|
\cos\Theta & 0 & \sin\Theta & 0 \\
|
|
@@ -566,7 +574,9 @@ R_y(\Theta) =
|
|
|
-\sin\Theta & 0 & \cos\Theta & 0 \\
|
|
-\sin\Theta & 0 & \cos\Theta & 0 \\
|
|
|
0 & 0 & 0 & 1
|
|
0 & 0 & 0 & 1
|
|
|
\end{pmatrix}绕Y轴旋转
|
|
\end{pmatrix}绕Y轴旋转
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R_z(\Theta) =
|
|
R_z(\Theta) =
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
|
\cos\Theta & -\sin\Theta & 0 & 0 \\
|
|
\cos\Theta & -\sin\Theta & 0 & 0 \\
|
|
@@ -574,13 +584,15 @@ R_z(\Theta) =
|
|
|
0 & 0 & 1 & 0 \\
|
|
0 & 0 & 1 & 0 \\
|
|
|
0 & 0 & 0 & 1
|
|
0 & 0 & 0 & 1
|
|
|
\end{pmatrix}绕Z轴旋转
|
|
\end{pmatrix}绕Z轴旋转
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R_{xyz}(\alpha, \beta, \sigma) = R_x(\alpha)R_y(\beta)R_z(\sigma)
|
|
R_{xyz}(\alpha, \beta, \sigma) = R_x(\alpha)R_y(\beta)R_z(\sigma)
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
> 旋转时,绕哪个轴旋转,那个轴对应的坐标不变,所以x轴旋转的第一行第一列、y轴旋转的第二行第二列、z轴旋转的第三行第三列
|
|
> 旋转时,绕哪个轴旋转,那个轴对应的坐标不变,所以x轴旋转的第一行第一列、y轴旋转的第二行第二列、z轴旋转的第三行第三列
|
|
|
|
|
|
|
|
-如何证明$R_{xyz}(\alpha, \beta, \sigma) = R_x(\alpha)R_y(\beta)R_z(\sigma)$成立,这个时候需要引入**罗德里格斯公式**
|
|
|
|
|
|
|
+如何证明 $R_{xyz}(\alpha, \beta, \sigma) = R_x(\alpha)R_y(\beta)R_z(\sigma) $成立,这个时候需要引入**罗德里格斯公式**
|
|
|
|
|
|
|
|
|
|
|
|
|
### 视图变换 Camera/View
|
|
### 视图变换 Camera/View
|
|
@@ -609,7 +621,7 @@ $$
|
|
|
2. 相机的朝向旋转到-Z轴方向
|
|
2. 相机的朝向旋转到-Z轴方向
|
|
|
3. 相机的向上向量旋转到Y轴方向
|
|
3. 相机的向上向量旋转到Y轴方向
|
|
|
|
|
|
|
|
-设定相机的朝向向量为g,相机向上的向量为t,可推得相机另一个轴的向量为$g \times t$
|
|
|
|
|
|
|
+设定相机的朝向向量为g,相机向上的向量为t,可推得相机另一个轴的向量为 $g \times t $
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
T_{view} =
|
|
T_{view} =
|
|
@@ -618,7 +630,9 @@ T_{view} =
|
|
|
0 & 1 & 0 & -y_e \\
|
|
0 & 1 & 0 & -y_e \\
|
|
|
0 & 0 & 0 & -z_e
|
|
0 & 0 & 0 & -z_e
|
|
|
\end{bmatrix} 坐标变换矩阵
|
|
\end{bmatrix} 坐标变换矩阵
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R^{-1}_{view} =
|
|
R^{-1}_{view} =
|
|
|
\begin{bmatrix}
|
|
\begin{bmatrix}
|
|
|
x_{g \times t} & x_t & x_{-g} & 0 \\
|
|
x_{g \times t} & x_t & x_{-g} & 0 \\
|
|
@@ -626,7 +640,9 @@ R^{-1}_{view} =
|
|
|
z_{g \times t} & z_t & z_{-g} & 0 \\
|
|
z_{g \times t} & z_t & z_{-g} & 0 \\
|
|
|
0 & 0 & 0 & 1
|
|
0 & 0 & 0 & 1
|
|
|
\end{bmatrix} 不加证明给出矩阵R_{view}^{-1}
|
|
\end{bmatrix} 不加证明给出矩阵R_{view}^{-1}
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R_{view}^{-1} *
|
|
R_{view}^{-1} *
|
|
|
\begin{bmatrix}
|
|
\begin{bmatrix}
|
|
|
1 \\ 0 \\ 0
|
|
1 \\ 0 \\ 0
|
|
@@ -636,11 +652,17 @@ R_{view}^{-1} *
|
|
|
y_{g \times t} \\
|
|
y_{g \times t} \\
|
|
|
z_{g \times t} \\
|
|
z_{g \times t} \\
|
|
|
\end{bmatrix} 可见R_{view}^{-1}乘以X轴、Y轴、Z轴都等于相机对应的向量坐标
|
|
\end{bmatrix} 可见R_{view}^{-1}乘以X轴、Y轴、Z轴都等于相机对应的向量坐标
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R^{-1}_{view} * 标准矩阵 = 相机矩阵 \Longrightarrow 相机矩阵 * R_{view} = 标准矩阵
|
|
R^{-1}_{view} * 标准矩阵 = 相机矩阵 \Longrightarrow 相机矩阵 * R_{view} = 标准矩阵
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R_{view}^{-1}是R_{view}的逆矩阵
|
|
R_{view}^{-1}是R_{view}的逆矩阵
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
R_{view} =
|
|
R_{view} =
|
|
|
\begin{bmatrix}
|
|
\begin{bmatrix}
|
|
|
x_{g \times t} & y_{g \times t} &z_{g \times t} & 0 \\
|
|
x_{g \times t} & y_{g \times t} &z_{g \times t} & 0 \\
|
|
@@ -648,7 +670,9 @@ R_{view} =
|
|
|
x_{-g} & y_{-g} & z_{-g} & 0 \\
|
|
x_{-g} & y_{-g} & z_{-g} & 0 \\
|
|
|
0 & 0 & 0 & 1
|
|
0 & 0 & 0 & 1
|
|
|
\end{bmatrix} 不加证明给出矩阵R_{view}
|
|
\end{bmatrix} 不加证明给出矩阵R_{view}
|
|
|
-\\
|
|
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
M_{view} = R_{view} T_{view} 组合后得出视图变换矩阵(从右往左的理解顺序,先平移、再旋转)
|
|
M_{view} = R_{view} T_{view} 组合后得出视图变换矩阵(从右往左的理解顺序,先平移、再旋转)
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
@@ -682,7 +706,7 @@ $$
|
|
|
|
|
|
|
|
> 因为相机朝向是-Z轴,所以f值一般小于r值
|
|
> 因为相机朝向是-Z轴,所以f值一般小于r值
|
|
|
|
|
|
|
|
-在定义完一个矩形之后,需要将其通过一系列变换转换成图片中最右边的标准立方体(canonical cub $[-1 ,1]^3$)
|
|
|
|
|
|
|
+在定义完一个矩形之后,需要将其通过一系列变换转换成图片中最右边的标准立方体(canonical cub $[-1 ,1]^3 $)
|
|
|
|
|
|
|
|
- 一系列变换指的是
|
|
- 一系列变换指的是
|
|
|
- 矩形移动到原点
|
|
- 矩形移动到原点
|
|
@@ -715,7 +739,7 @@ $$
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-前置知识:点(x, y, z, 1)乘以k,得到(kx, ky, kz, k != 0)表示其实也是点(x, y, z, 1),将k换成z,可以得到(xz, yz, $z^2$,z != 0),也表示(x, y, z, 1)这个点
|
|
|
|
|
|
|
+前置知识:点(x, y, z, 1)乘以k,得到(kx, ky, kz, k != 0)表示其实也是点(x, y, z, 1),将k换成z,可以得到(xz, yz, $z^2 $,z != 0),也表示(x, y, z, 1)这个点
|
|
|
|
|
|
|
|
> (1, 0, 0, 1)与(2, 0, 0, 2)表示同一个点
|
|
> (1, 0, 0, 1)与(2, 0, 0, 2)表示同一个点
|
|
|
|
|
|
|
@@ -738,13 +762,13 @@ $$
|
|
|
|
|
|
|
|
目标就是将(x, y, z) => (x, y\', z),通过相似三角形可以推出计算公式
|
|
目标就是将(x, y, z) => (x, y\', z),通过相似三角形可以推出计算公式
|
|
|
|
|
|
|
|
-设$M_{persp}$为透视变换矩阵
|
|
|
|
|
|
|
+设 $M_{persp} $为透视变换矩阵
|
|
|
|
|
|
|
|
-设$M^{(4\times4)}_{persp \rightarrow ortho}$为透视变换成正交的变换矩阵
|
|
|
|
|
|
|
+设 $M^{(4\times4)}_{persp \rightarrow ortho} $为透视变换成正交的变换矩阵
|
|
|
|
|
|
|
|
-得出$M_{persp}=M_{ortho}M^{(4\times4)}_{persp \rightarrow ortho}$,即将模型先变换成正交可以用的矩形,再通过正交变换矩阵计算
|
|
|
|
|
|
|
+得出 $M_{persp}=M_{ortho}M^{(4\times4)}_{persp \rightarrow ortho} $,即将模型先变换成正交可以用的矩形,再通过正交变换矩阵计算
|
|
|
|
|
|
|
|
-$x`=\frac{n}{z}x,y`=\frac{n}{z}y$
|
|
|
|
|
|
|
+ $x`=\frac{n}{z}x,y`=\frac{n}{z}y $
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
\begin{pmatrix}
|
|
\begin{pmatrix}
|
|
@@ -938,12 +962,12 @@ $$
|
|
|
|
|
|
|
|
**傅里叶变换**:给定任意函数可以通过一系列变换变成另一个函数,还可以把变换后的函数通过逆变换再变回去
|
|
**傅里叶变换**:给定任意函数可以通过一系列变换变成另一个函数,还可以把变换后的函数通过逆变换再变回去
|
|
|
|
|
|
|
|
-- 傅里叶变换: $F(w) = \int_{-\infty}^{\infty}f(x)e^{-2\pi iwx}dx$
|
|
|
|
|
-- 逆傅里叶变换:$f(x) = \int_{-\infty}^{\infty}F(w)e^{2\pi iwx}dw$
|
|
|
|
|
|
|
+- 傅里叶变换: $F(w) = \int_{-\infty}^{\infty}f(x)e^{-2\pi iwx}dx $
|
|
|
|
|
+- 逆傅里叶变换: $f(x) = \int_{-\infty}^{\infty}F(w)e^{2\pi iwx}dw $
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-这里给出不同的五种函数从$f_1(x) \Rightarrow f_5(x)$,从上到下频率逐渐增加,我们发现按照虚线对函数进行采样,采样得到的点(途中黑色的点)连起来逐渐不能恢复曲线原来的磨样(黑点之间的链接虚线与原曲线的差距越来越大)
|
|
|
|
|
|
|
+这里给出不同的五种函数从 $f_1(x) \Rightarrow f_5(x) $,从上到下频率逐渐增加,我们发现按照虚线对函数进行采样,采样得到的点(途中黑色的点)连起来逐渐不能恢复曲线原来的磨样(黑点之间的链接虚线与原曲线的差距越来越大)
|
|
|
|
|
|
|
|
通过上图我们可以发现,当采样的频率跟不上曲线变换的频率的时候,就无法还原出原始信号
|
|
通过上图我们可以发现,当采样的频率跟不上曲线变换的频率的时候,就无法还原出原始信号
|
|
|
|
|
|
|
@@ -1025,11 +1049,11 @@ $$
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-- 图(a) : $X_a(t)$为原函数图像
|
|
|
|
|
-- 图(c) : $P_\delta(t)$为冲击函数
|
|
|
|
|
-- 图(e) : $S(t)$为原函数与冲击函数乘积的结果,就是$X_a(t)$函数上离散的点
|
|
|
|
|
-- 图(b) : $X_a(t)$函数傅里叶变换之后的函数
|
|
|
|
|
-- 图(d) : $P_\delta(t)$冲击函数傅里叶变换之后的新的冲击函数
|
|
|
|
|
|
|
+- 图(a) : $X_a(t) $为原函数图像
|
|
|
|
|
+- 图(c) : $P_\delta(t) $为冲击函数
|
|
|
|
|
+- 图(e) : $S(t) $为原函数与冲击函数乘积的结果,就是 $X_a(t) $函数上离散的点
|
|
|
|
|
+- 图(b) : $X_a(t) $函数傅里叶变换之后的函数
|
|
|
|
|
+- 图(d) : $P_\delta(t) $冲击函数傅里叶变换之后的新的冲击函数
|
|
|
- 图(f) : 图(b)与图(d)的卷积的结果
|
|
- 图(f) : 图(b)与图(d)的卷积的结果
|
|
|
|
|
|
|
|
图(c)的冲击函数,就是只有在竖线上才有值,也就是说图(a)与图(c)的乘积就是在图(a)上周期行的取一些点,就跟之前的取样一样的
|
|
图(c)的冲击函数,就是只有在竖线上才有值,也就是说图(a)与图(c)的乘积就是在图(a)上周期行的取一些点,就跟之前的取样一样的
|
|
@@ -1110,7 +1134,7 @@ MSAA解决的对信号的模糊操作,只不过MSAA最后的出来的值也可
|
|
|
|
|
|
|
|
先画远处的面,再画近处的面,一层一层的覆盖
|
|
先画远处的面,再画近处的面,一层一层的覆盖
|
|
|
|
|
|
|
|
-需要先对所有的三角形面片进行排序,时间复杂度 $O(n\log _2n)$
|
|
|
|
|
|
|
+需要先对所有的三角形面片进行排序,时间复杂度 $O(n\log _2n) $
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
@@ -1130,7 +1154,7 @@ MSAA解决的对信号的模糊操作,只不过MSAA最后的出来的值也可
|
|
|
|
|
|
|
|
图中每个格子表示一个像素,先来了个一个三角形深度都是5,R表示无限大,则5比无限大小,可以覆盖;然后来了个新的三角形,根据深度信息进行覆盖操作
|
|
图中每个格子表示一个像素,先来了个一个三角形深度都是5,R表示无限大,则5比无限大小,可以覆盖;然后来了个新的三角形,根据深度信息进行覆盖操作
|
|
|
|
|
|
|
|
-一般而言,n个三角形,每个三角形覆盖常数个像素,那么最终时间复杂度只是$O(n)$
|
|
|
|
|
|
|
+一般而言,n个三角形,每个三角形覆盖常数个像素,那么最终时间复杂度只是 $O(n) $
|
|
|
|
|
|
|
|
## 着色
|
|
## 着色
|
|
|
|
|
|
|
@@ -1165,7 +1189,7 @@ shading,引入物体的明暗的不同,颜色的不同,**对不同的物
|
|
|
|
|
|
|
|
同一束光照,当紫色物体旋转时,其单位面积接收到的光变少,导致其变暗
|
|
同一束光照,当紫色物体旋转时,其单位面积接收到的光变少,导致其变暗
|
|
|
|
|
|
|
|
-任何一个着色点周围单位面积能接受到多少光照,与光线的角度成一定关系,从而引出Lambert's定律:接受到的光照与l和n的余弦(上图中的 $\cos \theta$)成正比
|
|
|
|
|
|
|
+任何一个着色点周围单位面积能接受到多少光照,与光线的角度成一定关系,从而引出Lambert's定律:接受到的光照与l和n的余弦(上图中的 $\cos \theta $)成正比
|
|
|
|
|
|
|
|
> 带入现实,一个是太阳能板,被照射面积越大热得越快;一个是四季,夏天是被太阳光直射
|
|
> 带入现实,一个是太阳能板,被照射面积越大热得越快;一个是四季,夏天是被太阳光直射
|
|
|
|
|
|
|
@@ -1173,7 +1197,7 @@ shading,引入物体的明暗的不同,颜色的不同,**对不同的物
|
|
|
|
|
|
|
|
对于一个光源,某一瞬间,其发出的能量是固定的,而伴随着光线的传递,其蕴含的能量也逐渐分散(球壳,而不是圆形)
|
|
对于一个光源,某一瞬间,其发出的能量是固定的,而伴随着光线的传递,其蕴含的能量也逐渐分散(球壳,而不是圆形)
|
|
|
|
|
|
|
|
-此时定义距离为1是,光线强度为**I**,当距离为r,则光纤强度为 $\frac{I}{r^2}$,通过这个式子可以算出当前传播到着色点的光照强度
|
|
|
|
|
|
|
+此时定义距离为1是,光线强度为**I**,当距离为r,则光纤强度为 $\frac{I}{r^2} $,通过这个式子可以算出当前传播到着色点的光照强度
|
|
|
|
|
|
|
|
通过上面两个公式,可以得到着色点(Shading Point)的光照强度、多少光会打在着色点上,得到计算式子
|
|
通过上面两个公式,可以得到着色点(Shading Point)的光照强度、多少光会打在着色点上,得到计算式子
|
|
|
|
|
|
|
@@ -1182,13 +1206,13 @@ L_d = k_d(I/r^2)max(0, n \cdot l)
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
- 上面的数学表达式就是**漫反射**的表示方法
|
|
- 上面的数学表达式就是**漫反射**的表示方法
|
|
|
- - $k_d$漫反射的系数,表示这个点吸收多少能量(类似物体吸收所有颜色就是黑色,不吸收所有颜色就是白色的物理规律)
|
|
|
|
|
- - $I/r^2$ 到达着色点的能量
|
|
|
|
|
- - $max(0, n \cdot l)$ 接收了多少能量
|
|
|
|
|
|
|
+ - $k_d $漫反射的系数,表示这个点吸收多少能量(类似物体吸收所有颜色就是黑色,不吸收所有颜色就是白色的物理规律)
|
|
|
|
|
+ - $I/r^2 $ 到达着色点的能量
|
|
|
|
|
+ - $max(0, n \cdot l) $ 接收了多少能量
|
|
|
|
|
|
|
|
-> 为什么是$max(0, n \cdot l)$ ,$n \cdot l$也就是$\cos \theta$可能为负数,因为光线可能从物体下面往上发射,而这种光不具备物理意义(这里只讨论发射,不讨论折射)
|
|
|
|
|
|
|
+> 为什么是 $max(0, n \cdot l) $ , $n \cdot l $也就是 $\cos \theta $可能为负数,因为光线可能从物体下面往上发射,而这种光不具备物理意义(这里只讨论发射,不讨论折射)
|
|
|
|
|
|
|
|
-漫反射的物理规律就是看一个物体无论从什么角度看都是一样的,而上面的$L_d$式子刚好与观察方向v没有任何关系
|
|
|
|
|
|
|
+漫反射的物理规律就是看一个物体无论从什么角度看都是一样的,而上面的 $L_d $式子刚好与观察方向v没有任何关系
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
@@ -1196,7 +1220,7 @@ $$
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-通过定义$k_d$颜色系数,可以定义该物体整体上的明暗
|
|
|
|
|
|
|
+通过定义 $k_d $颜色系数,可以定义该物体整体上的明暗
|
|
|
|
|
|
|
|
#### 高光
|
|
#### 高光
|
|
|
|
|
|
|
@@ -1220,21 +1244,21 @@ L_s = k_s(I / r^2)max(0, \cos \alpha)^p
|
|
|
k_s(I / r^2)max(0, n \cdot h)^p
|
|
k_s(I / r^2)max(0, n \cdot h)^p
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-- 高光的计算公式 $L_s$
|
|
|
|
|
- - $k_s$高光系数,颜色之类的,跟漫反射系数类似
|
|
|
|
|
- - $(I / r^2)$跟漫反射中的一样,高达此处的光的强度
|
|
|
|
|
- - $max(0, \vec{n} \cdot \vec{h})^p$根据观察角度能得到多少光
|
|
|
|
|
|
|
+- 高光的计算公式 $L_s $
|
|
|
|
|
+ - $k_s $高光系数,颜色之类的,跟漫反射系数类似
|
|
|
|
|
+ - $(I / r^2) $跟漫反射中的一样,高达此处的光的强度
|
|
|
|
|
+ - $max(0, \vec{n} \cdot \vec{h})^p $根据观察角度能得到多少光
|
|
|
|
|
|
|
|
1. 为啥使用半程向量:半程向量的计算比直接计算光的镜面反射向量简单
|
|
1. 为啥使用半程向量:半程向量的计算比直接计算光的镜面反射向量简单
|
|
|
-2. $\cos \alpha$,在$0~\pi$是单调递减的,复合这里$\alpha$越小高光越多的情况
|
|
|
|
|
-3. 不考虑从$\cos \alpha$为负数的情况,此时光从下面照射
|
|
|
|
|
-4. $max(0, \vec{n} \cdot \vec{h})^p$中指数p的作用如图下所示,通过参数p可以指定高光范围的大小(p越大,高光范围越小,对应下图p越大,数据变小越快,一般100~200)
|
|
|
|
|
|
|
+2. $\cos \alpha $,在 $0~\pi $是单调递减的,复合这里 $\alpha $越小高光越多的情况
|
|
|
|
|
+3. 不考虑从 $\cos \alpha $为负数的情况,此时光从下面照射
|
|
|
|
|
+4. $max(0, \vec{n} \cdot \vec{h})^p $中指数p的作用如图下所示,通过参数p可以指定高光范围的大小(p越大,高光范围越小,对应下图p越大,数据变小越快,一般100~200)
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-从上到下 高光系数 $k_s$ 逐渐变大,可以发现越来越亮;从左到右 指数p 逐渐变大,高光范围逐渐变小
|
|
|
|
|
|
|
+从上到下 高光系数 $k_s $ 逐渐变大,可以发现越来越亮;从左到右 指数p 逐渐变大,高光范围逐渐变小
|
|
|
|
|
|
|
|
#### 环境光照
|
|
#### 环境光照
|
|
|
|
|
|
|
@@ -1252,8 +1276,8 @@ $$
|
|
|
L_a = k_aI_a
|
|
L_a = k_aI_a
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-- 环境光 $L_a$
|
|
|
|
|
- - $K_a$ 环境光照系数
|
|
|
|
|
|
|
+- 环境光 $L_a $
|
|
|
|
|
+ - $K_a $ 环境光照系数
|
|
|
|
|
|
|
|
#### 累加
|
|
#### 累加
|
|
|
|
|
|
|
@@ -1335,7 +1359,7 @@ Shader控制顶点管线(**Vertex Processing**)和着色管线如何运作(**Fra
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-对于漫反射的计算来说 $L_d = k_d (I / r^2) (\vec{n} \cdot \vec{l})$,上述图片就是球的每个点的 $k_d$ 是不同的
|
|
|
|
|
|
|
+对于漫反射的计算来说 $L_d = k_d (I / r^2) (\vec{n} \cdot \vec{l}) $,上述图片就是球的每个点的 $k_d $ 是不同的
|
|
|
|
|
|
|
|
那么纹理映射就是定义任何一个点的不同属性
|
|
那么纹理映射就是定义任何一个点的不同属性
|
|
|
|
|
|
|
@@ -1371,11 +1395,11 @@ Shader控制顶点管线(**Vertex Processing**)和着色管线如何运作(**Fra
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-三角形所在平面上的任一点(x, y)都可以用 $(x, y) = \alpha A + \beta B + \gamma C$ 且 $\alpha + \gamma + \beta = 1$
|
|
|
|
|
|
|
+三角形所在平面上的任一点(x, y)都可以用 $(x, y) = \alpha A + \beta B + \gamma C $ 且 $\alpha + \gamma + \beta = 1 $
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-也可以使用各面积除以总面积算出$\alpha , \beta , \gamma$
|
|
|
|
|
|
|
+也可以使用各面积除以总面积算出 $\alpha , \beta , \gamma $
|
|
|
|
|
|
|
|
通过坐标计算三角形面积可以使用**海伦公式**:
|
|
通过坐标计算三角形面积可以使用**海伦公式**:
|
|
|
|
|
|
|
@@ -1490,7 +1514,7 @@ $$
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-以二维平面为例子,计算凹凸贴图影响后的法线方向 $d_p = c * [h(p+1) - h(p)]$
|
|
|
|
|
|
|
+以二维平面为例子,计算凹凸贴图影响后的法线方向 $d_p = c * [h(p+1) - h(p)] $
|
|
|
|
|
|
|
|
1. 求斜率,用下一个点的高度减去当前点的高度可以近似求出当前点的斜率
|
|
1. 求斜率,用下一个点的高度减去当前点的高度可以近似求出当前点的斜率
|
|
|
2. 常数 **c** 用来做权重设置的,表示当前法线贴图的影响程度
|
|
2. 常数 **c** 用来做权重设置的,表示当前法线贴图的影响程度
|
|
@@ -1604,15 +1628,15 @@ $$
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-首先控制点有三个$b_0, b_1, b_2$
|
|
|
|
|
|
|
+首先控制点有三个 $b_0, b_1, b_2 $
|
|
|
|
|
|
|
|
-其次 $t$ 表示时间(或者说百分比),取值范围是0~1
|
|
|
|
|
|
|
+其次 $t $ 表示时间(或者说百分比),取值范围是0~1
|
|
|
|
|
|
|
|
-1. 在$b_0 - b_1$的线段上,百分比为t的点$b_0^1$
|
|
|
|
|
-2. 同理在$b_1 - b_2$的线段上,找到百分比为t的点$b_1^1$
|
|
|
|
|
-3. 在$b_0^1 - b_1^1$的线段上,找到百分比为t的点$b_0^2$
|
|
|
|
|
|
|
+1. 在 $b_0 - b_1 $的线段上,百分比为t的点 $b_0^1 $
|
|
|
|
|
+2. 同理在 $b_1 - b_2 $的线段上,找到百分比为t的点 $b_1^1 $
|
|
|
|
|
+3. 在 $b_0^1 - b_1^1 $的线段上,找到百分比为t的点 $b_0^2 $
|
|
|
|
|
|
|
|
-这个$b_0^2$就是时间为$t$时,点的坐标
|
|
|
|
|
|
|
+这个 $b_0^2 $就是时间为 $t $时,点的坐标
|
|
|
|
|
|
|
|
接下来就是得到所有的时间t的点,得到的就是一个连续曲线
|
|
接下来就是得到所有的时间t的点,得到的就是一个连续曲线
|
|
|
|
|
|
|
@@ -1623,11 +1647,11 @@ b_0^2(t) = (1-t)*b_0^1 + t*b_1^1\\
|
|
|
b_0^2(t) = (1-t)^2*b_0 + 2*t*(1-t)*b_1 + t^2*b_2
|
|
b_0^2(t) = (1-t)^2*b_0 + 2*t*(1-t)*b_1 + t^2*b_2
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-上面的计算式子 $b_0,b_1,b_2$的参数很像是$[(1-t) + t]^2 = (1-t)^2 + 2*t*(1-t) + t^2$
|
|
|
|
|
|
|
+上面的计算式子 $b_0,b_1,b_2 $的参数很像是 $[(1-t) + t]^2 = (1-t)^2 + 2*t*(1-t) + t^2 $
|
|
|
|
|
|
|
|
-同理,三次贝塞尔曲线中$b_0,b_1,b_2,b_4$的参数应该就是$[(1-t) + t]^3$分解之后的
|
|
|
|
|
|
|
+同理,三次贝塞尔曲线中 $b_0,b_1,b_2,b_4 $的参数应该就是 $[(1-t) + t]^3 $分解之后的
|
|
|
|
|
|
|
|
-通过上面计算式子和 $b_0,b_1,b_2$的表现效果,推理得出贝塞尔曲线的可能的式子
|
|
|
|
|
|
|
+通过上面计算式子和 $b_0,b_1,b_2 $的表现效果,推理得出贝塞尔曲线的可能的式子
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
b^n(t) = \sum_{j=0}^{n}b_j*B_j^n(t)\\
|
|
b^n(t) = \sum_{j=0}^{n}b_j*B_j^n(t)\\
|
|
@@ -1639,7 +1663,7 @@ $$
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-三次贝塞尔曲线的求解方式类似,得到时间$t$的点$b_0^1, b_1^1, b_2^1$,将三次贝塞尔曲线转变成了二次贝塞尔曲线,再走二次贝塞尔的求点方法,得到时间$t$对应的点
|
|
|
|
|
|
|
+三次贝塞尔曲线的求解方式类似,得到时间 $t $的点 $b_0^1, b_1^1, b_2^1 $,将三次贝塞尔曲线转变成了二次贝塞尔曲线,再走二次贝塞尔的求点方法,得到时间 $t $对应的点
|
|
|
|
|
|
|
|
很明显,这是一个**递归**的过程
|
|
很明显,这是一个**递归**的过程
|
|
|
|
|
|
|
@@ -1995,13 +2019,13 @@ Shadow Mapping可以处理硬阴影的情况:即一个点要么在阴影中,
|
|
|
|
|
|
|
|
数学中的光线就是一个射线,有一个起点,有一个方向
|
|
数学中的光线就是一个射线,有一个起点,有一个方向
|
|
|
|
|
|
|
|
-假设起点坐标为 `o`, 方向向量为 `d`, 得到光线任一点的表达式 $ r(t) = o + t*d $ 其中 t 是 0 到 正无穷、
|
|
|
|
|
|
|
+假设起点坐标为 `o`, 方向向量为 `d`, 得到光线任一点的表达式 $ r(t) = o + t*d $ 其中 t 是 0 到 正无穷、
|
|
|
|
|
|
|
|
对于 **隐式表面**
|
|
对于 **隐式表面**
|
|
|
|
|
|
|
|
-假设现在要碰撞的是一个球,设球面上任意点的坐标为p,球心坐标为c,球的半径为R,得到球面的表达式 $(p - c)^2 - R^2 = 0$
|
|
|
|
|
|
|
+假设现在要碰撞的是一个球,设球面上任意点的坐标为p,球心坐标为c,球的半径为R,得到球面的表达式 $(p - c)^2 - R^2 = 0 $
|
|
|
|
|
|
|
|
-那么联立光线和球的表达式可以求出交点 $(o + td - c)^2 - R^2 = 0$
|
|
|
|
|
|
|
+那么联立光线和球的表达式可以求出交点 $(o + td - c)^2 - R^2 = 0 $
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
@@ -2010,7 +2034,7 @@ Shadow Mapping可以处理硬阴影的情况:即一个点要么在阴影中,
|
|
|
|
|
|
|
|
可以将 光线 与 球 交点的计算,推广到其他 隐式表面 的计算上
|
|
可以将 光线 与 球 交点的计算,推广到其他 隐式表面 的计算上
|
|
|
|
|
|
|
|
-假设 隐式表面 的数学公式为 $ f(p) = 0 $, 带入 光线 的公式得到交点 $ f (o + t*d) = 0 $
|
|
|
|
|
|
|
+假设 隐式表面 的数学公式为 $ f(p) = 0 $, 带入 光线 的公式得到交点 $ f (o + t*d) = 0 $
|
|
|
|
|
|
|
|
再 带入 上面说明的 t大于 0、 t不能为虚数、 多交点时取t小的点 就可以得到交点坐标
|
|
再 带入 上面说明的 t大于 0、 t不能为虚数、 多交点时取t小的点 就可以得到交点坐标
|
|
|
|
|
|
|
@@ -2036,9 +2060,9 @@ Shadow Mapping可以处理硬阴影的情况:即一个点要么在阴影中,
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
-上图中 $P_0 P_1 P_2$ 分别是是三角形重心到三个顶点的向量
|
|
|
|
|
|
|
+上图中 $P_0 P_1 P_2 $ 分别是是三角形重心到三个顶点的向量
|
|
|
|
|
|
|
|
-通过 $ (1 - b_1 - b_2) * P_0 + b_1 * P_1 + b_2 * P_2 $ 可以表示三角形中任意点的坐标
|
|
|
|
|
|
|
+通过 $ (1 - b_1 - b_2) * P_0 + b_1 * P_1 + b_2 * P_2 $ 可以表示三角形中任意点的坐标
|
|
|
|
|
|
|
|
一个物体有很多个三角形,最简单暴力的做法就是交**依次对每个三角形求**,最后得出距离光线起点最近的点 也就是 t 最小的点
|
|
一个物体有很多个三角形,最简单暴力的做法就是交**依次对每个三角形求**,最后得出距离光线起点最近的点 也就是 t 最小的点
|
|
|
|
|
|
|
@@ -2062,32 +2086,32 @@ Shadow Mapping可以处理硬阴影的情况:即一个点要么在阴影中,
|
|
|
|
|
|
|
|
> 对应的表示方法可以是AABB表示
|
|
> 对应的表示方法可以是AABB表示
|
|
|
|
|
|
|
|
-依旧以 $(o + td - c)^2 - R^2 = 0$ 为例
|
|
|
|
|
|
|
+依旧以 $(o + td - c)^2 - R^2 = 0 $ 为例
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
以二维平面为例
|
|
以二维平面为例
|
|
|
|
|
|
|
|
-一般用 $Point_0 = (x_{0}, y_{0})$ 和 $Point_1 = (x_{1}, y_{1})$ 就可以表示一个二维平面的包围盒,${Point_0}$ 表示 矩形 的左下角,${Point_1}$ 表示矩形的 右上角,通过两点即可表示出一个矩形
|
|
|
|
|
|
|
+一般用 $Point_0 = (x_{0}, y_{0}) $ 和 $Point_1 = (x_{1}, y_{1}) $ 就可以表示一个二维平面的包围盒, ${Point_0} $ 表示 矩形 的左下角, ${Point_1} $ 表示矩形的 右上角,通过两点即可表示出一个矩形
|
|
|
|
|
|
|
|
-- 上图中间得到 $t_{y_{min}}$ 和 $t_{y_{max}}$ 两个点,表示光线与包围盒y轴交点是t的值
|
|
|
|
|
-- 上图左边得到 $t_{x_{min}}$ 和 $t_{x_{max}}$ 两个点,表示光线与包围盒x轴交点是t的值
|
|
|
|
|
-- 那么在包围盒中的t值为 $t_{x_{min}}$ 和 $t_{y_{max}}$
|
|
|
|
|
|
|
+- 上图中间得到 $t_{y_{min}} $ 和 $t_{y_{max}} $ 两个点,表示光线与包围盒y轴交点是t的值
|
|
|
|
|
+- 上图左边得到 $t_{x_{min}} $ 和 $t_{x_{max}} $ 两个点,表示光线与包围盒x轴交点是t的值
|
|
|
|
|
+- 那么在包围盒中的t值为 $t_{x_{min}} $ 和 $t_{y_{max}} $
|
|
|
|
|
|
|
|
-通过求出 光线 与 x、y 平面相交的的时间,得出 $t_{enter} = min(t_{y_{min}}, t_{x_{min}})$ 和 $t_{quit} = max(t_{y_{max}}, t_{x_{max}})$
|
|
|
|
|
|
|
+通过求出 光线 与 x、y 平面相交的的时间,得出 $t_{enter} = min(t_{y_{min}}, t_{x_{min}}) $ 和 $t_{quit} = max(t_{y_{max}}, t_{x_{max}}) $
|
|
|
|
|
|
|
|
-> $t_{quit}$ 表示 光线 离开碰撞盒的t值
|
|
|
|
|
-> $t_{enter}$ 表示 光线 进入碰撞和的t值
|
|
|
|
|
|
|
+> $t_{quit} $ 表示 光线 离开碰撞盒的t值
|
|
|
|
|
+> $t_{enter} $ 表示 光线 进入碰撞和的t值
|
|
|
|
|
|
|
|
于是将该理论发展到三维空间
|
|
于是将该理论发展到三维空间
|
|
|
|
|
|
|
|
-$Point_0 = (x_{min}, y_{min}, z_{min})$ 和 $Point_1 = (x_{max}, y_{max}, z_{min})$ 可以表示一个三维空间的矩形范围
|
|
|
|
|
|
|
+ $Point_0 = (x_{min}, y_{min}, z_{min}) $ 和 $Point_1 = (x_{max}, y_{max}, z_{min}) $ 可以表示一个三维空间的矩形范围
|
|
|
|
|
|
|
|
-$t_{enter} = min(t_{x_{min}}, t_{y_{min}}, t_{z_{min}})$
|
|
|
|
|
-$t_{quit} = max(t_{x_{max}}, t_{y_{max}}, t_{z_{max}})$
|
|
|
|
|
|
|
+ $t_{enter} = min(t_{x_{min}}, t_{y_{min}}, t_{z_{min}}) $
|
|
|
|
|
+ $t_{quit} = max(t_{x_{max}}, t_{y_{max}}, t_{z_{max}}) $
|
|
|
|
|
|
|
|
-- 如果 ${t_{quit}}$ 小于 0,则表示 光线 与 碰撞体 不相交,因为 光线 离开碰撞盒子的 t 小于0, 则表示 碰撞盒 在光线的反方向
|
|
|
|
|
-- $t_{enter}$ 小于0, ${t_{quit}} 大于0,则表示 光源 在碰撞盒 内部
|
|
|
|
|
-- 如果 $t_{enter}$ 小于 ${t_{quit}},并且 $t_{quit}$ 大于 0, 则表示 光线 与 碰撞盒 相交
|
|
|
|
|
|
|
+- 如果 ${t_{quit}} $ 小于 0,则表示 光线 与 碰撞体 不相交,因为 光线 离开碰撞盒子的 t 小于0, 则表示 碰撞盒 在光线的反方向
|
|
|
|
|
+- $t_{enter} $ 小于0, ${t_{quit}} 大于0,则表示 光源 在碰撞盒 内部
|
|
|
|
|
+- 如果 $t_{enter} $ 小于 ${t_{quit}},并且 $t_{quit} $ 大于 0, 则表示 光线 与 碰撞盒 相交
|
|
|
|
|
|
|
|
# 动画模拟、仿真
|
|
# 动画模拟、仿真
|