图形绘制技术 Lab2

纹理的采样、映射以及生成
502023330051 孙博文

光线微分

根据 $p_i - p_0 = \Delta u \dfrac{\partial p}{\partial u} + \Delta v \dfrac{\partial p}{\partial v}$

将其分成3个维度计算,以 $u$ 为例,$p(w, u, v)$ 是点坐标,$t(u, v)$ 是纹理坐标,而我们先前假设,$\dfrac{\partial p}{\partial u}$ 和 $\dfrac{\partial p}{\partial v}$ 都是常数:

$p_1.u - p_0.u = \Delta t_1.u \dfrac{\partial p.u}{\partial t.u} + \Delta t_1.v \dfrac{\partial p.u}{\partial t.v}$

$p_2.u - p_0.u = \Delta t_2.u \dfrac{\partial p.u}{\partial t.u} + \Delta t_2.v \dfrac{\partial p.u}{\partial t.v}$

故可以写成:

$$ \begin{bmatrix} p_1.u - p_0.u\\\\ p_2.u - p_0.u \end{bmatrix} =\begin{bmatrix} \Delta t_1.u &\Delta t_1.v\\\\ \Delta t_2.u &\Delta t2.v \end{bmatrix} \begin{bmatrix} \dfrac{\partial p.u}{\partial t.u}\\\\ \dfrac{\partial p.u}{\partial t.v} \end{bmatrix} $$

2阶方阵中 $\Delta t_1.u$ 可以通过计算 $t_1, t_0$ 的 $u$ 方向差值得到,其余同理;

左边可以计算三角形点坐标差得到。

进而调用 solveLinearSystem2x2 可求得 $\dfrac{\partial p.u}{\partial t.u}$ 和 $\dfrac{\partial p.u}{\partial t.v}$,即$\dfrac{\partial p}{\partial u}$ 和 $\dfrac{\partial p}{\partial v}$ 在 $u$ 方向上的分量。

$v, w$ 方向同理。

求解代码如下:

image-20240520185709226

双线性滤波结果:

image-20240520185915426

光线微分结果:

image-20240520185829080

纹理映射

球面映射:计算出方位角后,修正到 [0, 1]

用于修正的fix函数:

image-20240520202122018

圆柱体:v 取归一化的 z 坐标

平面:直接取 x,y 坐标

image-20240520202219930

image-20240520194408285

image-20240520195042337

image-20240520202023233

木纹

在构造函数中读取木纹的属性并生成随机的单位向量

image-20240520212215999

evaluate 中,根据坐标,使用 Berlin 噪声和双线性插值计算颜色,与讲义一致

image-20240520215052001

image-20240520214932641