Pixel World

it's better be burning out than to fade away.

图形学的数学基础(十二):几何图元-包围盒($Bounding Box$)

包围盒是一种求解离散点集最优包围空间的算法,基本思想是用体积稍大且特性简单的几何形状来近似代替复杂的几何对象。包围盒常用于几何物体的碰撞检测,ray-tracing中光线求交等。常用的包围盒有两种,$AABB与OBB$,AABB包围盒是轴对齐的,而$OBB$是有向的。

$AABB$

$AABB$是$Axially\;Aligned\;Bounding\;Box$的缩写,三维$AABB$是一个简单的6面盒子,每一面都与一个基向量形成的面平行,这个盒子不一定是立方体,盒子的长度宽度高度可以各自不同。

重要属性

几何体$AABB$包围盒内的点满足以下不等式:

$x_{min} <= x <= x_{max}$

$y_{min} <= y <= y_{max}$

$z_{min} <= z <= z_{max}$

阅读全文 »

图形学的数学基础(十一):几何图元-重心坐标

重心坐标

定义重心坐标($Barycentric\;Coordinates$)

对于空间内的三角形$\triangle{v_1v_2v_3}$和任意一点$\textbf{p}$,必定唯一存在三个数$b_1,b_2,b_3$,满足:

$b_1+b_2+b_3 = 1$

$\textbf{p} = b_1\textbf{v}_1 + b_2\textbf{v}_2+ b_3\textbf{v}_3$

则$b_1,b_2,b_3$就称为$\textbf{p}$点在此三角形$\triangle{v_1v_2v_3}$上的重心坐标.

重心坐标表示了三角形每个顶点对该点的权重(贡献),重心坐标可以用来三角形光栅化顶点的属性插值,比如说uv 颜色 法线的线性插值。

重心坐标也是一种坐标系统,类似于普通笛卡尔坐标系,但有一个区别就是,重心坐标的三个分量之和为1:

阅读全文 »

图形学的数学基础(十):几何图元-三角形

三角形在图形学中具有重要意义。复杂三维对象的表面都是由庞大三角形网格组成($Triangle\;Mesh$),本章将介绍三角形基本属性,重点是重心坐标。

定义

定义一个三角形,只需要三个顶点即可,这些点的顺序至关重要,因为它们的顺序决定了三角面的正反,在右手系中,当从三角形正面看时,通常按逆时针方向枚举点(右手螺旋定则)。

三角形定义

边向量,边长 顶点定义如下:

$\vec{e_1} = \textbf{v}_3 - \textbf{v}_2$

$\vec{e_2} = \textbf{v}_1 - \textbf{v}_3$

$\vec{e_3} = \textbf{v}_2 - \textbf{v}_1$

阅读全文 »

图形学的数学基础(九):几何图元-球体圆形和平面

转载请注明出处

球体和圆形

球体是一个三维对象,定义与给定点具有固定距离的所有点的集合。从球体中心到点的距离称为球体半径($Radius$),球体的直接表示方式是描述其中心$\textbf{c}$和半径$r$。

球体的隐式表述

$||\textbf{p} - \textbf{c}|| = r$

$(x-x_c)^2 + (y-y_c)^2 + (z-z_c)^2 = r^2$

重要属性

  • 直径 $D = 2r$
  • 圆周长 $C = 2\pi{r}$
  • 圆面积 $A = \pi{r^2}$
  • 球体表面积 $S = 4\pi{r^2}$
  • 球体体积 $S = \dfrac{4}{3}\pi{r^3}$
阅读全文 »

几何图元-直线和光线

几何表述

在计算机图形学中,描述几何形状的主要策略有两大类:隐式几何和显示几何。

隐式几何($implicit\ Geometry$)

通过隐函数的方式描述一个对象,一般采用$f(x,y,z) = 0$的定义方式,告诉了我们$x,y,z$需要满足的关系。例如对于三维空间以原点为圆心的单位球可以这表示:

$x^2+y^2+z^2 = 1$

隐函数形式可以方便的通过将点带入函数,判断点是否在几何表面上,之内或之外。但是隐函数无法直观的告诉有哪些点是满足这种关系的。

隐式几何

隐式几何代表:

阅读全文 »

图形学的数学基础(七):极坐标系

笛卡尔坐标系不是精确绘制空间和定义位置的唯一坐标系统。笛卡尔系统的替代方案是极坐标系($Polar\;Coordinate\;System$)

二维极坐标系

二维笛卡尔坐标系有一个原点和两个穿过原点的轴$(x,y)$。二维极坐标空间也有一个原点,称为极点($Pole$)-定义了坐标空间的中心,不同的是,极坐标系只有一个轴,称为极轴($Polar\; Axis$),

二维极坐标系

定义

在极坐标系中,我们通常用$(r,\theta)$定义一个点,r为距离原点的长度,$\theta$为相对于极轴旋转的角度(逆时针方向).

二维极坐标系

别名

阅读全文 »

图形学的数学基础(六):mvp变换

图形学的一个重要任务是将三维空间中的模型映射到二维平面(以像素为单位),这是一个复杂的过程,取决于许多因素,包括但不限于相机的位置,方向,投影的类型(正交/透视),fov,和viewport宽高,对于所有复杂的矩阵变换,最好的做法是将其分解为几个更简单的矩阵乘积。大多数图形系统通过使用四个转换序列来实现mvp变换,以openGL为例:

mvp变换

  1. worldMatrix:将视图从模型空间转换到世界空间。直白的说就是将模型摆放到世界坐标空间。这一步确立了世界空间中各模型的相对布局,摆放位置。

  2. viewMatrix:将视图从世界空间转换到相机空间。简单来讲就是:我们从何处,以什么样的视角观察世界。

  3. Projection:将视图从相机空间映射到$[-1,1]^3$,的单位立方体中,为下一步viewport变换做准备。

  4. viewport: 将视图从单位立方体映射到所需的屏幕空间($screenSpace$),取决于输出图像的大小和位置。

mvp变换

视图变换

现实生活中,如果相机和所有物体一起移动(相对位置关系不变),则拍出来的照片也都是一样的。根据这个原理我们得出:将相机移动到原点,朝向-z方向,构造出一个变换矩阵$\textbf{M}_{view}$,其他物体随着相机一起移动(应用$\textbf{M}_{view}$)。即可完成viewTransform。如何构造$\textbf{M}_{view}$?将视图从世界空间转换到相机空间?首先需要定义相机参数:

  • 位置(eye Position):$\mathbf{e}$
  • 观测方向(gaze Direction):$\vec{g}$
  • 向上方向(up Direction):$\vec{t}$

根据这些信息,我们可以构造一个以$\mathbf{e}$为原点的uvw标准正交基。

阅读全文 »

图形学的数学基础(五):矩阵进阶

行列式

对于方形矩阵,有一个特殊的标量称为矩阵的行列式($Determinant$。方形矩阵$\textbf{M}$的行列式表示为$|\textbf{M}|$,也表示为“det M”。非方形矩阵的行列式是未定义的。

$2\times 2$和$3\times 3$矩阵的行列式

$2\times 2$矩阵行列式:

$\begin{vmatrix}M\end{vmatrix} = \begin{vmatrix}m_{11}&m_{12}\\ m_{21}&m_{22}\end{vmatrix} = m_{11}m_{22} - m_{12}m_{21}$

$3\times 3$矩阵行列式:

$\begin{vmatrix}M\end{vmatrix} = \begin{vmatrix}m_{11}&m_{12}&m_{13}\\ m_{21}&m_{22}&m_{23}\\ m_{31}&m_{32}&m_{33}\end{vmatrix} = m_{11}m_{22} - m_{12}m_{21} = m_{11}m_{22}m_{33} + m_{12}m_{23}m_{31} + m_{13}m_{21}m_{32} - m_{13}m_{22}m_{31} - m_{12}m_{21}m_{33} - m_{11}m_{23}m_{32} = m_{11}(m_{22}m_{33} - m_{23}m_{32}) + m_{12}(m_{23}m_{31} - m_{21}m_{33}) + m_{13}(m_{21}m_{32} - m_{22}m_{31})$

3x3矩阵行列式

阅读全文 »

图形学的数学基础(四):矩阵线性变换

我们可以通过将点的坐标加上一个偏移值来实现平移。 我们还可以利用三角函数来旋转一个向量。 简而言之,矩阵只是将所有这些变换(缩放、旋转、反射、错切、平移)通过统一结构来表达的一种方式。 通过矩阵可以方便对空间中的点或向量进行各种变换,而不用写一大堆的公式。这就是矩阵为何在图形学中如此重要的原因。图形学中的任意变换都可以通过一个矩阵完成 对同一个对象的多次变换可以通过矩阵相乘转换为单个矩阵。如下图:

注:本文所有推导和公式均使用列向量形式。

alt

线性变换

缩放(Scale)

沿主轴缩放

最简单的缩放是沿每个轴线应用单独的或均匀缩放。

均匀缩放

阅读全文 »

图形学的数学基础(三):矩阵

不幸的是,没有人能够告诉我们矩阵是什么。你必须亲自去看看。 -墨菲斯《黑客帝国》

矩阵在图形学中具有重要意义,它们主要用于描述两个坐标空间之间的转换关系,通过矩阵和向量相乘,可以将向量从某一坐标空间转换到另一个坐标空间。通过矩阵和矩阵相乘,可以描述一系列的变换动作。

数学定义

在线性代数中,矩阵是排列成行和列的矩形数字网格。矩阵可以定义为数字的二维数组。因此向量是标量的数组,而矩阵是向量的数组。

矩阵维度和表示法

通过计算矩阵包含的行数和列数来定义矩阵的大小,对于具有$r$行和$c$列的矩阵,称为 $r \times c$矩阵。
当希望引用矩阵中的各个元素时,可以使用下标表示法。符号$m_{ij}$表示矩阵$Mi行j列$对应的元素。需要注意的是,矩阵初始索引为1,并不是0.

方阵(Square Matrice)

具有相同行数和列数的矩阵称为方形矩阵,方阵的对角元素是行和列索引相同的元素。例如 $3\times3$矩阵M的对角元素是$m_{11},m_{22},m_{33}$。
如果矩阵中所有的非对角元素都为零,则该矩阵为对角矩阵(Diagonal Matrix)。

阅读全文 »
0%