|
@@ -53,13 +53,13 @@ $$
|
|
|
- 2D: $\vec{a} \cdot \vec{b} = (^{x_a} _{y_a}) \cdot (^{x_b} _{y_b}) = x_a*x_b + y_a*y_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$
|
|
- 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$
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
\vec{b_{\bot}} = \lVert \vec{b_\bot} \rVert = \lVert \vec{b} \rVert * \cos \Theta
|
|
\vec{b_{\bot}} = \lVert \vec{b_\bot} \rVert = \lVert \vec{b} \rVert * \cos \Theta
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 方向大致相同:$\cos{(\vec{a} \backsim \vec{b})} < 0$
|
|
> 方向大致相同:$\cos{(\vec{a} \backsim \vec{b})} < 0$
|
|
|
> 方向不同:$\cos{(\vec{a} \backsim \vec{c})} > 0$
|
|
> 方向不同:$\cos{(\vec{a} \backsim \vec{c})} > 0$
|
|
@@ -74,7 +74,7 @@ $$
|
|
|
|
|
|
|
|
两个向量叉乘的结果是垂直于当前两个向量所在平面的新的向量
|
|
两个向量叉乘的结果是垂直于当前两个向量所在平面的新的向量
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
\vec{a} \times \vec{b} = -\vec{b} \times \vec{a}\\
|
|
\vec{a} \times \vec{b} = -\vec{b} \times \vec{a}\\
|
|
@@ -249,7 +249,7 @@ $$
|
|
|
|
|
|
|
|
#### 伸缩变换(Scale)
|
|
#### 伸缩变换(Scale)
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
x' = sx\\
|
|
x' = sx\\
|
|
@@ -269,7 +269,7 @@ $$
|
|
|
|
|
|
|
|
### 镜像
|
|
### 镜像
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
x' = -x\\
|
|
x' = -x\\
|
|
@@ -289,7 +289,7 @@ $$
|
|
|
|
|
|
|
|
#### 切变
|
|
#### 切变
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
x' = x + a*y\\
|
|
x' = x + a*y\\
|
|
@@ -311,7 +311,7 @@ $$
|
|
|
|
|
|
|
|
**默认绕原点逆时针旋转**
|
|
**默认绕原点逆时针旋转**
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
公式推导
|
|
公式推导
|
|
|
- 右下角点坐标(1, 0)=>($\cos\Theta, \sin\Theta$)
|
|
- 右下角点坐标(1, 0)=>($\cos\Theta, \sin\Theta$)
|
|
@@ -335,7 +335,7 @@ $$
|
|
|
|
|
|
|
|
#### 平移(Transiation)
|
|
#### 平移(Transiation)
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- $x' = x + t_x$
|
|
- $x' = x + t_x$
|
|
|
- $y' = y + t_y$
|
|
- $y' = y + t_y$
|
|
@@ -450,7 +450,7 @@ $$
|
|
|
|
|
|
|
|
### 逆变换
|
|
### 逆变换
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
逆变换就是把之前的操作反向来一次,对应的就是矩阵中的逆矩阵
|
|
逆变换就是把之前的操作反向来一次,对应的就是矩阵中的逆矩阵
|
|
|
|
|
|
|
@@ -459,10 +459,10 @@ $$
|
|
|
### 组合变换
|
|
### 组合变换
|
|
|
|
|
|
|
|
- 图1
|
|
- 图1
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- 图2
|
|
- 图2
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 旋转默认绕原点,逆时针旋转
|
|
> 旋转默认绕原点,逆时针旋转
|
|
|
|
|
|
|
@@ -502,7 +502,7 @@ $$
|
|
|
|
|
|
|
|
### 变换的分解
|
|
### 变换的分解
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
如果想让图片围绕左下角旋转,而不是原点选择,可以采用的解法是
|
|
如果想让图片围绕左下角旋转,而不是原点选择,可以采用的解法是
|
|
|
|
|
|
|
@@ -599,7 +599,7 @@ $$
|
|
|
- 向上的向量(一个向量就可以确定相机的Roll)
|
|
- 向上的向量(一个向量就可以确定相机的Roll)
|
|
|
- 朝向
|
|
- 朝向
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
**约定:相机永远在原点,永远不动,永远以y轴向上,永远看向-Z轴**
|
|
**约定:相机永远在原点,永远不动,永远以y轴向上,永远看向-Z轴**
|
|
|
其他物体也跟着相机移动
|
|
其他物体也跟着相机移动
|
|
@@ -658,14 +658,14 @@ $$
|
|
|
|
|
|
|
|
### 投影变换
|
|
### 投影变换
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 图中左边为正交投影,右边是透视投影
|
|
> 图中左边为正交投影,右边是透视投影
|
|
|
|
|
|
|
|
- 正交投影不会带来近大远小的世界效果,一般用于工程制图
|
|
- 正交投影不会带来近大远小的世界效果,一般用于工程制图
|
|
|
- 透视投影会有近大远小
|
|
- 透视投影会有近大远小
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 图中左边为透视投影,右边为正交投影
|
|
> 图中左边为透视投影,右边为正交投影
|
|
|
|
|
|
|
@@ -673,7 +673,7 @@ $$
|
|
|
|
|
|
|
|
#### 正交投影 Orthographic
|
|
#### 正交投影 Orthographic
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- 在正交投影中定义一个矩阵,需要定义
|
|
- 在正交投影中定义一个矩阵,需要定义
|
|
|
- l(left)、r(right),左平面距离矩形中心的距离和右平面距离矩形中心的距离
|
|
- l(left)、r(right),左平面距离矩形中心的距离和右平面距离矩形中心的距离
|
|
@@ -713,13 +713,13 @@ $$
|
|
|
|
|
|
|
|
理论上两条平行的先看起来相交了
|
|
理论上两条平行的先看起来相交了
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
前置知识:点(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)表示同一个点
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- 透视投影分两步
|
|
- 透视投影分两步
|
|
|
1. 将Frustum平截头体转换成Cuboid矩形
|
|
1. 将Frustum平截头体转换成Cuboid矩形
|
|
@@ -730,7 +730,7 @@ $$
|
|
|
- f(far)平面的z值不会发生变换,只是在平面内进行收缩
|
|
- f(far)平面的z值不会发生变换,只是在平面内进行收缩
|
|
|
- n、f平面的中心点不会发生变化
|
|
- n、f平面的中心点不会发生变化
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
通过侧面观察,更容易得到结论
|
|
通过侧面观察,更容易得到结论
|
|
|
|
|
|
|
@@ -853,7 +853,7 @@ $$
|
|
|
- 宽高比
|
|
- 宽高比
|
|
|
- 垂直的可视角度
|
|
- 垂直的可视角度
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- **屏幕**:图形学中认为屏幕是一个数组,数组中每一个元素是一个像素
|
|
- **屏幕**:图形学中认为屏幕是一个数组,数组中每一个元素是一个像素
|
|
|
- **光栅**:Raster,就表示屏幕,光栅化(Rasterize)可以理解为把东西绘制在屏幕上
|
|
- **光栅**:Raster,就表示屏幕,光栅化(Rasterize)可以理解为把东西绘制在屏幕上
|
|
@@ -886,7 +886,7 @@ $$
|
|
|
|
|
|
|
|
利用像素中心,对屏幕空间进行采样
|
|
利用像素中心,对屏幕空间进行采样
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
inside(tri, x, y) =
|
|
inside(tri, x, y) =
|
|
@@ -912,7 +912,7 @@ for(int x = 0; x < width; ++x){
|
|
|
|
|
|
|
|
## 走样与反走样
|
|
## 走样与反走样
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
**锯齿**、**走样**、**Aliasing**
|
|
**锯齿**、**走样**、**Aliasing**
|
|
|
|
|
|
|
@@ -924,11 +924,11 @@ for(int x = 0; x < width; ++x){
|
|
|
|
|
|
|
|
在采样之前做**模糊**、**滤波**处理
|
|
在采样之前做**模糊**、**滤波**处理
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
**傅里叶级数展开**:任何周期性函数都写成一系列正弦和余弦以及一个常数项的总和
|
|
**傅里叶级数展开**:任何周期性函数都写成一系列正弦和余弦以及一个常数项的总和
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
f(x) = \frac{A}{2} + \frac{2A\cos(tw)}{\pi} - \frac{2A\cos(3tw)}{3\pi} + \frac{2A\cos(5tw)}{5\pi} - \frac{2A\cos(7tw)}{7\pi} + ...
|
|
f(x) = \frac{A}{2} + \frac{2A\cos(tw)}{\pi} - \frac{2A\cos(3tw)}{3\pi} + \frac{2A\cos(5tw)}{5\pi} - \frac{2A\cos(7tw)}{7\pi} + ...
|
|
@@ -941,13 +941,13 @@ $$
|
|
|
- 傅里叶变换: $F(w) = \int_{-\infty}^{\infty}f(x)e^{-2\pi iwx}dx$
|
|
- 傅里叶变换: $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(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)$,从上到下频率逐渐增加,我们发现按照虚线对函数进行采样,采样得到的点(途中黑色的点)连起来逐渐不能恢复曲线原来的磨样(黑点之间的链接虚线与原曲线的差距越来越大)
|
|
|
|
|
|
|
|
通过上图我们可以发现,当采样的频率跟不上曲线变换的频率的时候,就无法还原出原始信号
|
|
通过上图我们可以发现,当采样的频率跟不上曲线变换的频率的时候,就无法还原出原始信号
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 竖线为采样线,白点为采集到的点,蓝色和黑色线表示两种函数
|
|
> 竖线为采样线,白点为采集到的点,蓝色和黑色线表示两种函数
|
|
|
|
|
|
|
@@ -957,7 +957,7 @@ $$
|
|
|
|
|
|
|
|
傅里叶变换可以把图片从时域信号变为频域信号
|
|
傅里叶变换可以把图片从时域信号变为频域信号
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 图左为时域信号,图右为频域信号
|
|
> 图左为时域信号,图右为频域信号
|
|
|
|
|
|
|
@@ -965,7 +965,7 @@ $$
|
|
|
|
|
|
|
|
根据上述图片来理解就是:亮点主要集中在中心,说明原图片低频信息多,高频信息少(不是没有)
|
|
根据上述图片来理解就是:亮点主要集中在中心,说明原图片低频信息多,高频信息少(不是没有)
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
同一张图,如果将**频域空间**中间的低频信号删除(白色改成黑色),再逆傅里叶变换回去,可以发现图像的边界特别明显
|
|
同一张图,如果将**频域空间**中间的低频信号删除(白色改成黑色),再逆傅里叶变换回去,可以发现图像的边界特别明显
|
|
|
|
|
|
|
@@ -973,13 +973,13 @@ $$
|
|
|
|
|
|
|
|
边界,可以理解成上下或左右差距很大的地方。那么差距大就可以理解为变化频率高,即**高频信息**,那么通过**高频滤波**,自然而然就只剩下差距大的地方的了
|
|
边界,可以理解成上下或左右差距很大的地方。那么差距大就可以理解为变化频率高,即**高频信息**,那么通过**高频滤波**,自然而然就只剩下差距大的地方的了
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
同一张图,如果将**频域空间**的所有高频信息都删除(除中心点附近特定半径内,都设为黑色),再傅里叶变换回去,可以得到一张很模糊的图片
|
|
同一张图,如果将**频域空间**的所有高频信息都删除(除中心点附近特定半径内,都设为黑色),再傅里叶变换回去,可以得到一张很模糊的图片
|
|
|
|
|
|
|
|
> 上述操作就是**低通滤波**(低频率通过 高频率去掉)
|
|
> 上述操作就是**低通滤波**(低频率通过 高频率去掉)
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 特定内容在,**数字图像**处理中学习
|
|
> 特定内容在,**数字图像**处理中学习
|
|
|
|
|
|
|
@@ -989,7 +989,7 @@ $$
|
|
|
|
|
|
|
|
**Filtering** = **Convolution** = **Averaging**
|
|
**Filtering** = **Convolution** = **Averaging**
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 简单卷积的理解
|
|
> 简单卷积的理解
|
|
|
> Filter:滤波器、Siganl:信号
|
|
> Filter:滤波器、Siganl:信号
|
|
@@ -1007,7 +1007,7 @@ $$
|
|
|
> 可以拿到一个图,用某种滤波器去做卷积操作
|
|
> 可以拿到一个图,用某种滤波器去做卷积操作
|
|
|
> 也可以得到图片的傅里叶变换的频域,再把卷积的滤波器变换到频域上,再把两者相乘,得到的频域的结果,最后将结果逆傅里叶变化到时域上
|
|
> 也可以得到图片的傅里叶变换的频域,再把卷积的滤波器变换到频域上,再把两者相乘,得到的频域的结果,最后将结果逆傅里叶变化到时域上
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 均值滤波
|
|
> 均值滤波
|
|
|
|
|
|
|
@@ -1023,7 +1023,7 @@ $$
|
|
|
|
|
|
|
|
**采样**就是重复频域上的内容
|
|
**采样**就是重复频域上的内容
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- 图(a) : $X_a(t)$为原函数图像
|
|
- 图(a) : $X_a(t)$为原函数图像
|
|
|
- 图(c) : $P_\delta(t)$为冲击函数
|
|
- 图(c) : $P_\delta(t)$为冲击函数
|
|
@@ -1036,7 +1036,7 @@ $$
|
|
|
|
|
|
|
|
**采样**:在频率上的理解就是**重复**一个原始信号的平铺
|
|
**采样**:在频率上的理解就是**重复**一个原始信号的平铺
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
上图中,上面是合理的采样周期,原始信号的平铺是井然有序、严丝合缝的;当采样率不足或采样不够快,就会导致原始信号的间距越小
|
|
上图中,上面是合理的采样周期,原始信号的平铺是井然有序、严丝合缝的;当采样率不足或采样不够快,就会导致原始信号的间距越小
|
|
|
|
|
|
|
@@ -1054,13 +1054,13 @@ $$
|
|
|
|
|
|
|
|
通过**低通滤波**,去掉高频信息,再采样
|
|
通过**低通滤波**,去掉高频信息,再采样
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
通过去掉高频信号,让原本混叠的部分,不再混叠,从而减少了走样
|
|
通过去掉高频信号,让原本混叠的部分,不再混叠,从而减少了走样
|
|
|
|
|
|
|
|
如何模糊:使用一定大小的低通滤波器对每个像素的覆盖面积做一个卷积
|
|
如何模糊:使用一定大小的低通滤波器对每个像素的覆盖面积做一个卷积
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
Original是每个像素可能出现的情况,被覆盖小部分、被覆盖一半、被覆盖大部分、被完全覆盖
|
|
Original是每个像素可能出现的情况,被覆盖小部分、被覆盖一半、被覆盖大部分、被完全覆盖
|
|
|
|
|
|
|
@@ -1074,11 +1074,11 @@ Fileterd是每个像素通过低通滤波器卷积后的结果
|
|
|
|
|
|
|
|
这是近似算法,严格意义上不能解决走样问题
|
|
这是近似算法,严格意义上不能解决走样问题
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
将一个像素,分成若干个小的像素(图中是将一个像素分成4*4,黑色的点表示各个小像素的中心点),然后再判断各个小像素的中心点是否在三角形中,再把判断结果平均一下,就能得到当前像素百分之多少在三角形中的**近似值**
|
|
将一个像素,分成若干个小的像素(图中是将一个像素分成4*4,黑色的点表示各个小像素的中心点),然后再判断各个小像素的中心点是否在三角形中,再把判断结果平均一下,就能得到当前像素百分之多少在三角形中的**近似值**
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
MSAA解决的对信号的模糊操作,只不过MSAA最后的出来的值也可以用作**采样**
|
|
MSAA解决的对信号的模糊操作,只不过MSAA最后的出来的值也可以用作**采样**
|
|
|
|
|
|
|
@@ -1112,7 +1112,7 @@ MSAA解决的对信号的模糊操作,只不过MSAA最后的出来的值也可
|
|
|
|
|
|
|
|
需要先对所有的三角形面片进行排序,时间复杂度 $O(n\log _2n)$
|
|
需要先对所有的三角形面片进行排序,时间复杂度 $O(n\log _2n)$
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
画家算法无法解决这种互相遮挡的关系
|
|
画家算法无法解决这种互相遮挡的关系
|
|
|
|
|
|
|
@@ -1120,13 +1120,13 @@ MSAA解决的对信号的模糊操作,只不过MSAA最后的出来的值也可
|
|
|
|
|
|
|
|
对单独的三角形面片无法排序,那么直接对单个像素进行处理,保证单个像素所存的是其看到的几何物体的最浅的深度信息,即**深度图**,**深度缓存**
|
|
对单独的三角形面片无法排序,那么直接对单个像素进行处理,保证单个像素所存的是其看到的几何物体的最浅的深度信息,即**深度图**,**深度缓存**
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
左边为渲染出的图片,右边为深度图
|
|
左边为渲染出的图片,右边为深度图
|
|
|
|
|
|
|
|
> 深度图中,越近越黑,越远越白
|
|
> 深度图中,越近越黑,越远越白
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
图中每个格子表示一个像素,先来了个一个三角形深度都是5,R表示无限大,则5比无限大小,可以覆盖;然后来了个新的三角形,根据深度信息进行覆盖操作
|
|
图中每个格子表示一个像素,先来了个一个三角形深度都是5,R表示无限大,则5比无限大小,可以覆盖;然后来了个新的三角形,根据深度信息进行覆盖操作
|
|
|
|
|
|
|
@@ -1143,7 +1143,7 @@ shading,引入物体的明暗的不同,颜色的不同,**对不同的物
|
|
|
- 漫反射
|
|
- 漫反射
|
|
|
- 间接光照
|
|
- 间接光照
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- 定义
|
|
- 定义
|
|
|
- 在局部,比较小的范围内,物体表面是一个平面(无论物体长什么样)
|
|
- 在局部,比较小的范围内,物体表面是一个平面(无论物体长什么样)
|
|
@@ -1153,7 +1153,7 @@ shading,引入物体的明暗的不同,颜色的不同,**对不同的物
|
|
|
- 颜色color
|
|
- 颜色color
|
|
|
- 光的亮度 shininess
|
|
- 光的亮度 shininess
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 所有的方向都是单位向量,只表示方向
|
|
> 所有的方向都是单位向量,只表示方向
|
|
|
|
|
|
|
@@ -1161,7 +1161,7 @@ shading,引入物体的明暗的不同,颜色的不同,**对不同的物
|
|
|
|
|
|
|
|
> 暂且只讨论某一个点的着色,也就是只考虑光照的方向,而不考虑照向这个点的光是不是被挡住了
|
|
> 暂且只讨论某一个点的着色,也就是只考虑光照的方向,而不考虑照向这个点的光是不是被挡住了
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
同一束光照,当紫色物体旋转时,其单位面积接收到的光变少,导致其变暗
|
|
同一束光照,当紫色物体旋转时,其单位面积接收到的光变少,导致其变暗
|
|
|
|
|
|
|
@@ -1169,7 +1169,7 @@ shading,引入物体的明暗的不同,颜色的不同,**对不同的物
|
|
|
|
|
|
|
|
> 带入现实,一个是太阳能板,被照射面积越大热得越快;一个是四季,夏天是被太阳光直射
|
|
> 带入现实,一个是太阳能板,被照射面积越大热得越快;一个是四季,夏天是被太阳光直射
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
对于一个光源,某一瞬间,其发出的能量是固定的,而伴随着光线的传递,其蕴含的能量也逐渐分散(球壳,而不是圆形)
|
|
对于一个光源,某一瞬间,其发出的能量是固定的,而伴随着光线的传递,其蕴含的能量也逐渐分散(球壳,而不是圆形)
|
|
|
|
|
|
|
@@ -1190,11 +1190,11 @@ $$
|
|
|
|
|
|
|
|
漫反射的物理规律就是看一个物体无论从什么角度看都是一样的,而上面的$L_d$式子刚好与观察方向v没有任何关系
|
|
漫反射的物理规律就是看一个物体无论从什么角度看都是一样的,而上面的$L_d$式子刚好与观察方向v没有任何关系
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
通过前面的解释,可以清楚的了解为什么这个球是渐变的,从亮变灰再变黑
|
|
通过前面的解释,可以清楚的了解为什么这个球是渐变的,从亮变灰再变黑
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
通过定义$k_d$颜色系数,可以定义该物体整体上的明暗
|
|
通过定义$k_d$颜色系数,可以定义该物体整体上的明暗
|
|
|
|
|
|
|
@@ -1202,7 +1202,7 @@ $$
|
|
|
|
|
|
|
|
高光:物体、平面比较光滑,所以反射光线的方向都接近镜面反射的方向
|
|
高光:物体、平面比较光滑,所以反射光线的方向都接近镜面反射的方向
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
图中R表示镜面反射的方向,黄色部分表示高光反射的区域,v表示观察方向
|
|
图中R表示镜面反射的方向,黄色部分表示高光反射的区域,v表示观察方向
|
|
|
|
|
|
|
@@ -1210,7 +1210,7 @@ $$
|
|
|
|
|
|
|
|
在Blinn-Phong模型中,观察方向与镜面反射方向接近的时候,说明了平面的法线方向和 **半程向量(half vector)** 接近
|
|
在Blinn-Phong模型中,观察方向与镜面反射方向接近的时候,说明了平面的法线方向和 **半程向量(half vector)** 接近
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
半程向量:\vec{h} = bisector(\vec{v}, \vec{l}) = \frac{\vec{v} + \vec{l}}{\lVert \vec{v} + \vec{l} \rVert}
|
|
半程向量:\vec{h} = bisector(\vec{v}, \vec{l}) = \frac{\vec{v} + \vec{l}}{\lVert \vec{v} + \vec{l} \rVert}
|
|
@@ -1230,9 +1230,9 @@ $$
|
|
|
3. 不考虑从$\cos \alpha$为负数的情况,此时光从下面照射
|
|
3. 不考虑从$\cos \alpha$为负数的情况,此时光从下面照射
|
|
|
4. $max(0, \vec{n} \cdot \vec{h})^p$中指数p的作用如图下所示,通过参数p可以指定高光范围的大小(p越大,高光范围越小,对应下图p越大,数据变小越快,一般100~200)
|
|
4. $max(0, \vec{n} \cdot \vec{h})^p$中指数p的作用如图下所示,通过参数p可以指定高光范围的大小(p越大,高光范围越小,对应下图p越大,数据变小越快,一般100~200)
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
从上到下 高光系数 $k_s$ 逐渐变大,可以发现越来越亮;从左到右 指数p 逐渐变大,高光范围逐渐变小
|
|
从上到下 高光系数 $k_s$ 逐渐变大,可以发现越来越亮;从左到右 指数p 逐渐变大,高光范围逐渐变小
|
|
|
|
|
|
|
@@ -1242,7 +1242,7 @@ $$
|
|
|
|
|
|
|
|
在Blinn-Phong模型中,直接大胆假设:任何一个点接收到来自环境的光永远是相同的
|
|
在Blinn-Phong模型中,直接大胆假设:任何一个点接收到来自环境的光永远是相同的
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
从图中可以发现,环境光与光照角度无光,与观察角度无关(每个角度观察都一样),因此环境光是一个**常数**,即是某一种颜色(比如说一个物体,在任何地方都有一个固定的颜色)
|
|
从图中可以发现,环境光与光照角度无光,与观察角度无关(每个角度观察都一样),因此环境光是一个**常数**,即是某一种颜色(比如说一个物体,在任何地方都有一个固定的颜色)
|
|
|
|
|
|
|
@@ -1257,7 +1257,7 @@ $$
|
|
|
|
|
|
|
|
#### 累加
|
|
#### 累加
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> Ambient 环境光、Diffuse 漫反射、Specular 高光
|
|
> Ambient 环境光、Diffuse 漫反射、Specular 高光
|
|
|
|
|
|
|
@@ -1268,7 +1268,7 @@ $$
|
|
|
|
|
|
|
|
### 着色频率
|
|
### 着色频率
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
三个球的几何表示在空间中是一样的,但是表现出来的结果却不相同
|
|
三个球的几何表示在空间中是一样的,但是表现出来的结果却不相同
|
|
|
|
|
|
|
@@ -1282,7 +1282,7 @@ $$
|
|
|
|
|
|
|
|
> **Phong Shading**并不是**Blinn-Phong**,前者是着色频率,后者是着色模型
|
|
> **Phong Shading**并不是**Blinn-Phong**,前者是着色频率,后者是着色模型
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
图中每一行的模型相同,从上网下模型精细度增加
|
|
图中每一行的模型相同,从上网下模型精细度增加
|
|
|
|
|
|
|
@@ -1298,7 +1298,7 @@ $$
|
|
|
|
|
|
|
|
**顶点的法线**:顶点相邻面的法线的平均值
|
|
**顶点的法线**:顶点相邻面的法线的平均值
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
$$
|
|
$$
|
|
|
N_v = \frac{\sum _iN_i}{\lVert \sum _iN_i \rVert}
|
|
N_v = \frac{\sum _iN_i}{\lVert \sum _iN_i \rVert}
|
|
@@ -1312,7 +1312,7 @@ $$
|
|
|
|
|
|
|
|
管线其实就是表示一系列不同的操作
|
|
管线其实就是表示一系列不同的操作
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
1. 三维空间的点投影到平面上
|
|
1. 三维空间的点投影到平面上
|
|
|
2. 模型的点形成三角形
|
|
2. 模型的点形成三角形
|
|
@@ -1320,7 +1320,7 @@ $$
|
|
|
4. 着色
|
|
4. 着色
|
|
|
5. 渲染到屏幕
|
|
5. 渲染到屏幕
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
这里**shading**既有可能发生在**Vertex Processing**也有可能发生**Fragment Processing**,因为渲染频率的问题,因为渲染频率既可能是顶点频率,也可能是像素频率,而这就影响了渲染管线的处理顺序
|
|
这里**shading**既有可能发生在**Vertex Processing**也有可能发生**Fragment Processing**,因为渲染频率的问题,因为渲染频率既可能是顶点频率,也可能是像素频率,而这就影响了渲染管线的处理顺序
|
|
|
|
|
|
|
@@ -1333,23 +1333,23 @@ Shader控制顶点管线(**Vertex Processing**)和着色管线如何运作(**Fra
|
|
|
|
|
|
|
|
### 纹理映射(Texture Mapping)
|
|
### 纹理映射(Texture Mapping)
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
对于漫反射的计算来说 $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$ 是不同的
|
|
|
|
|
|
|
|
那么纹理映射就是定义任何一个点的不同属性
|
|
那么纹理映射就是定义任何一个点的不同属性
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
通过上图,可以不加证明给出结论,任何物体的表面都是二维的,那么物体的表面就可以和一张图产生一一对应映射关系,从而引出**纹理**
|
|
通过上图,可以不加证明给出结论,任何物体的表面都是二维的,那么物体的表面就可以和一张图产生一一对应映射关系,从而引出**纹理**
|
|
|
|
|
|
|
|
将一张图通过拉伸、压缩等操作,将其蒙在物体上,那么这个蒙住的过程就是**纹理映射**
|
|
将一张图通过拉伸、压缩等操作,将其蒙在物体上,那么这个蒙住的过程就是**纹理映射**
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
注意图中箭头所指的三个三角形面片,左边两个面片是模型中的面片,右边面片是映射图片与模型三角形面片对应的三角形面片
|
|
注意图中箭头所指的三个三角形面片,左边两个面片是模型中的面片,右边面片是映射图片与模型三角形面片对应的三角形面片
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
上图中右边的UV是纹理贴图的坐标系
|
|
上图中右边的UV是纹理贴图的坐标系
|
|
|
|
|
|
|
@@ -1357,7 +1357,7 @@ Shader控制顶点管线(**Vertex Processing**)和着色管线如何运作(**Fra
|
|
|
|
|
|
|
|
通过UV坐标系和模型的映射,可以知道模型中三角形的每一个顶点都对应UV坐标系中的某一个点
|
|
通过UV坐标系和模型的映射,可以知道模型中三角形的每一个顶点都对应UV坐标系中的某一个点
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
一个模型中的纹理可以是重复的
|
|
一个模型中的纹理可以是重复的
|
|
|
|
|
|
|
@@ -1369,11 +1369,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$
|
|
|
|
|
|
|
@@ -1384,9 +1384,9 @@ p = \frac{a + b + c}{2} 三角形周长的一般 \\
|
|
|
s = \sqrt{p * (p - a) * (p - b) * (p - c)}
|
|
s = \sqrt{p * (p - a) * (p - b) * (p - c)}
|
|
|
$$
|
|
$$
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
三维空间中三角形的重心坐标计算结果与空间三角形投影之后的三角形再计算投影三角形的重心结果很可能不同,也就是说如果插值三维空间的属性,那么需要插值三维空间的坐标,而不是投影后的三角形插值
|
|
三维空间中三角形的重心坐标计算结果与空间三角形投影之后的三角形再计算投影三角形的重心结果很可能不同,也就是说如果插值三维空间的属性,那么需要插值三维空间的坐标,而不是投影后的三角形插值
|
|
|
|
|
|
|
@@ -1400,12 +1400,12 @@ $$
|
|
|
|
|
|
|
|
> A pixel on a texture —— a **texel**(纹理元素、纹素)
|
|
> A pixel on a texture —— a **texel**(纹理元素、纹素)
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
- 解决方法1:**Nearest**,四舍五入,4k分辨率映射到256*256的纹理中,大多数点对应的都是小数,那么直接四舍五入成整数再取纹理中的值
|
|
- 解决方法1:**Nearest**,四舍五入,4k分辨率映射到256*256的纹理中,大多数点对应的都是小数,那么直接四舍五入成整数再取纹理中的值
|
|
|
- 解决方法2:**Bilinear** 双线性插值
|
|
- 解决方法2:**Bilinear** 双线性插值
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
图中红色点是像素对应贴图的坐标,如果使用Nearest方法那么其对应的颜色就是u11点,使用双线性插值的时候会计算目标坐标附近的**四个像素点**再次进行线性插值计算
|
|
图中红色点是像素对应贴图的坐标,如果使用Nearest方法那么其对应的颜色就是u11点,使用双线性插值的时候会计算目标坐标附近的**四个像素点**再次进行线性插值计算
|
|
|
|
|
|
|
@@ -1422,13 +1422,13 @@ $$
|
|
|
|
|
|
|
|
> 远距离的树木,贴图很精细,但是其对应的像素点很少,这就是该问题的使用场景
|
|
> 远距离的树木,贴图很精细,但是其对应的像素点很少,这就是该问题的使用场景
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
> 远处出现了摩尔纹 近处出现了锯齿 统称走样
|
|
> 远处出现了摩尔纹 近处出现了锯齿 统称走样
|
|
|
|
|
|
|
|
贴图从远到近,每个像素点对应的贴图面积从近到远,从小到大,远处的一个像素点要可能对应多个三角面片
|
|
贴图从远到近,每个像素点对应的贴图面积从近到远,从小到大,远处的一个像素点要可能对应多个三角面片
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
走样的原理就是信号变化过快,采样频率跟不上变化频率。在这里可以理解为一个像素表示采样频率,而像素所覆盖的纹理变化表示信号变化。这里很明显,**上图中**,从左到右,采样频率不变,纹理变化原来越大,从而导致走样越来越严重
|
|
走样的原理就是信号变化过快,采样频率跟不上变化频率。在这里可以理解为一个像素表示采样频率,而像素所覆盖的纹理变化表示信号变化。这里很明显,**上图中**,从左到右,采样频率不变,纹理变化原来越大,从而导致走样越来越严重
|
|
|
|
|
|
|
@@ -1438,7 +1438,7 @@ $$
|
|
|
|
|
|
|
|
所谓Mipmap就是用一张图生成一系列图,每次分辨率缩小到一半
|
|
所谓Mipmap就是用一张图生成一系列图,每次分辨率缩小到一半
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
在渲染之前,把纹理提前用Mipmap生成一遍,对比原来的使用空间大小,多用了1/3的空间
|
|
在渲染之前,把纹理提前用Mipmap生成一遍,对比原来的使用空间大小,多用了1/3的空间
|
|
|
|
|
|
|
@@ -1458,7 +1458,7 @@ $$
|
|
|
|
|
|
|
|
- Spherical Map(球形贴图)
|
|
- Spherical Map(球形贴图)
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
将环境光存储到球上,展开成贴图时会发生扭曲,上图右边的上面和下面都有不同程序的扭曲形变
|
|
将环境光存储到球上,展开成贴图时会发生扭曲,上图右边的上面和下面都有不同程序的扭曲形变
|
|
|
|
|
|
|
@@ -1466,7 +1466,7 @@ $$
|
|
|
|
|
|
|
|
为了解决球形贴图导致的扭曲问题,进而提出了Cube Map
|
|
为了解决球形贴图导致的扭曲问题,进而提出了Cube Map
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
从圆心发出一条射线,将打到的球表面点和Cube面的点关联映射起来
|
|
从圆心发出一条射线,将打到的球表面点和Cube面的点关联映射起来
|
|
|
|
|
|
|
@@ -1478,7 +1478,7 @@ $$
|
|
|
|
|
|
|
|
贴图不仅可以描述颜射,还可以定义任何不同的位置,任何不同的属性
|
|
贴图不仅可以描述颜射,还可以定义任何不同的位置,任何不同的属性
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
比如上图的左边,定义点在基础表面沿着法线方向往上往下的相对高度
|
|
比如上图的左边,定义点在基础表面沿着法线方向往上往下的相对高度
|
|
|
|
|
|
|
@@ -1488,7 +1488,7 @@ $$
|
|
|
|
|
|
|
|
> 人为的做一个假的法线,从而影响着色结果
|
|
> 人为的做一个假的法线,从而影响着色结果
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
以二维平面为例子,计算凹凸贴图影响后的法线方向 $d_p = c * [h(p+1) - h(p)]$
|
|
以二维平面为例子,计算凹凸贴图影响后的法线方向 $d_p = c * [h(p+1) - h(p)]$
|
|
|
|
|
|
|
@@ -1504,7 +1504,7 @@ $$
|
|
|
|
|
|
|
|
位移贴图真的对点的位置进行了变化
|
|
位移贴图真的对点的位置进行了变化
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
上图左边是凹凸贴图的表现效果,有一个很明显的穿帮点,就是明明表面看起来凹凸不平,但是球的边缘就是光滑的
|
|
上图左边是凹凸贴图的表现效果,有一个很明显的穿帮点,就是明明表面看起来凹凸不平,但是球的边缘就是光滑的
|
|
|
|
|
|
|
@@ -1516,7 +1516,7 @@ $$
|
|
|
|
|
|
|
|
- 缓存预先计算的信息
|
|
- 缓存预先计算的信息
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
上图左边为简单渲染的效果,中间为提前计算好的环境光遮罩的贴图,将左边左边计算和中间预计算好的贴图结合起来,得到右边更真实的效果
|
|
上图左边为简单渲染的效果,中间为提前计算好的环境光遮罩的贴图,将左边左边计算和中间预计算好的贴图结合起来,得到右边更真实的效果
|
|
|
|
|
|
|
@@ -1525,7 +1525,156 @@ $$
|
|
|
|
|
|
|
|
# 几何
|
|
# 几何
|
|
|
|
|
|
|
|
-## 简单介绍
|
|
|
|
|
|
|
+## 几何的表示
|
|
|
|
|
+
|
|
|
|
|
+### 隐式物体面的表示
|
|
|
|
|
+
|
|
|
|
|
+- 数学公式
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+通过计算数学公式直接表示一个几何形体,是比较简单的
|
|
|
|
|
+
|
|
|
|
|
+但是不够直观,比如心形数学公式,不看表现效果是根本不知道这个数学公式的含义
|
|
|
|
|
+
|
|
|
|
|
+其次,数学公式并不能表示一个特别复杂的形体(理论可行,实际操作很难),比如河南用数学公式表示一个奶牛的几何形体
|
|
|
|
|
+
|
|
|
|
|
+- CSG(Constructive Solid Geometry)
|
|
|
|
|
+
|
|
|
|
|
+通过一些列基本几何的基本运算,得到一个新的几何
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+通过上面的一系列变换,能够得到一个比较复杂的几何
|
|
|
|
|
+
|
|
|
|
|
+- Distance Functions 距离函数
|
|
|
|
|
+
|
|
|
|
|
+并不直接用公式描述几何,而是去描述点到表面的距离
|
|
|
|
|
+
|
|
|
|
|
+空间中的任何一个点,到你想要表述的几何形体上任意点的最小距离(可以正、负)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+上图中有个几何体分别有自己的距离函数,通过混合两个集合体的距离函数,可以达到从左到右的效果
|
|
|
|
|
+
|
|
|
|
|
+> 表示效果很强
|
|
|
|
|
+
|
|
|
|
|
+- Level Set 水平集
|
|
|
|
|
+
|
|
|
|
|
+思想与距离函数一样,不同的是它函数的表示是写在格子上的
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+只需要找到中间值是0的地方,就能确定几何边界
|
|
|
|
|
+
|
|
|
|
|
+- Fractals 分形
|
|
|
|
|
+
|
|
|
|
|
+### 显式物体面的表示
|
|
|
|
|
+
|
|
|
|
|
+- Point Cloud 点云
|
|
|
|
|
+
|
|
|
|
|
+不把面当作面,而是很多的点,只要点足够密看不到缝隙
|
|
|
|
|
+
|
|
|
|
|
+点的表示方式也很简单,就是(x, y, z), 点云的表示方法就是一个点的数组
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+> 上图就是点云的基本表现效果,图片上方点足够密,越往下点越稀疏,其表现效果也越差
|
|
|
|
|
+
|
|
|
|
|
+- Polygon Mesh 多边形网格
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+需要存储点的坐标和各个点之间的连接关系
|
|
|
|
|
+
|
|
|
|
|
+## 曲线
|
|
|
|
|
+
|
|
|
|
|
+- 曲线的作用
|
|
|
|
|
+ - 定义移动轨迹、朝向等
|
|
|
|
|
+ - 定义字体
|
|
|
|
|
+ - ...
|
|
|
|
|
+
|
|
|
|
|
+### 贝塞尔曲线
|
|
|
|
|
+
|
|
|
|
|
+贝塞尔曲线:使用多个控制点去定义一个曲线,控制点可以曲线满足的一些性质
|
|
|
|
|
+
|
|
|
|
|
+绘制贝塞尔曲线需要用到**de Casteljau Algorithm**算法
|
|
|
|
|
+
|
|
|
|
|
+已二次贝塞尔曲线为例
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+首先控制点有三个$b_0, b_1, b_2$
|
|
|
|
|
+
|
|
|
|
|
+其次 $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$
|
|
|
|
|
+
|
|
|
|
|
+这个$b_0^2$就是时间为$t$时,点的坐标
|
|
|
|
|
+
|
|
|
|
|
+接下来就是得到所有的时间t的点,得到的就是一个连续曲线
|
|
|
|
|
+
|
|
|
|
|
+$$
|
|
|
|
|
+b_0^1(t) = (1-t)*b_0 + t*b_1\\
|
|
|
|
|
+b_1^1(t) = (1-t)*b_1 + t*b_2\\
|
|
|
|
|
+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,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^n(t) = \sum_{j=0}^{n}b_j*B_j^n(t)\\
|
|
|
|
|
+B_j^n(t) = \begin{pmatrix}
|
|
|
|
|
+n\\
|
|
|
|
|
+i
|
|
|
|
|
+\end{pmatrix} * t^j(1-t)^{n-j}
|
|
|
|
|
+$$
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+三次贝塞尔曲线的求解方式类似,得到时间$t$的点$b_0^1, b_1^1, b_2^1$,将三次贝塞尔曲线转变成了二次贝塞尔曲线,再走二次贝塞尔的求点方法,得到时间$t$对应的点
|
|
|
|
|
+
|
|
|
|
|
+很明显,这是一个**递归**的过程
|
|
|
|
|
+
|
|
|
|
|
+### Piecewise Bezier Curves 分段贝塞尔曲线
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+上图中存在**十个**控制点,最后也能的出来曲线,但是各个控制点对曲线的控制不够直观
|
|
|
|
|
+
|
|
|
|
|
+这时引入了分段贝塞尔,即仅使用少量的控制点去计算某一段贝塞尔曲线,最后将这些曲线连起来
|
|
|
|
|
+
|
|
|
|
|
+> 一般让**每四个控制点**去计算一段贝塞尔曲线
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+上图中每个控制点上有1/2个控制杆,控制杆的点其实就是四个控制点非起点和非终点的点
|
|
|
|
|
+
|
|
|
|
|
+> 黑色为起点/终点,蓝色为起点和终点中间的控制点
|
|
|
|
|
+
|
|
|
|
|
+只要控制点上两个控制杆上的点在一个直线上,那么该控制点上的曲线就是平滑过渡的,具有**连续性**
|
|
|
|
|
+
|
|
|
|
|
+### Spline 样条线
|
|
|
|
|
+
|
|
|
|
|
+一条连续的曲线,由控制点控制,任何地方都能满足一定的连续性
|
|
|
|
|
+
|
|
|
|
|
+- B-Splines
|
|
|
|
|
+ - Basic Splines,基础函数样条,由不同函数组合起来组成基函数,基于该函数的样条线
|
|
|
|
|
+ - 是对贝塞尔曲线的扩展
|
|
|
|
|
+- NURBS
|
|
|
|
|
+ - non-uniform rational B-spline,非均匀有理样条
|
|
|
|
|
+
|
|
|
|
|
+...
|
|
|
|
|
+
|
|
|
|
|
+## 曲面
|
|
|
|
|
+
|
|
|
|
|
|
|
|
# 光线追踪(Ray Tracing)
|
|
# 光线追踪(Ray Tracing)
|
|
|
|
|
|