Pixel World

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

几何图元-直线和光线

几何表述

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

隐式几何($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)。

阅读全文 »

图形学的数学基础(二):标准正交基/坐标系

标准正交基

对于三维空间任意三个向量,如果它们满足

  • $||\vec{u}|| = ||\vec{v}|| = ||\vec{w}|| = 1$
  • $\vec{u}.\vec{v} = \vec{v}.\vec{w} = \vec{u}.\vec{w} = 0$
  • $\vec{w} = \vec{u} \times \vec{v}$ (右手系)

即向量长度都为1,相互垂直, 这样的三个向量构成的坐标系称为标准正交基,$\vec{u} ,\vec{v},\vec{w}$称为标准正交基的基矢量.

为什么需要标准正交基

定义这样的坐标系,带来的一点好处就是, 空间中任意一矢量,都可以分解到标准正交基的三个轴上,需要用到前边向量投影的相关知识. 即矢量可以表示为基矢量的线性组合.
alt

$||\vec{b_⊥}|| = ||\vec{b}|| \cos\theta$

此时的$\vec{a}$为单位向量,即$||\vec{a}|| = 1$

阅读全文 »

图形学的数学基础(一):向量

前边的话

本系列是阅读《3D数学基础: 图形和游戏开发(第二版)》整理汇总的学习笔记,整个系列的结构排布基于原书的章节安排,针对其中的每个知识点做了适当的补充和拓展,其中不免有遗漏和错误之处,望各位读者批评指正。本篇文章做为该系列的第一章,主要介绍向量相关内容,涉及空间中向量的几何意义,各种运算,重点介绍点乘和叉乘的几何解释及在图形学中的应用场景。

数学定义

对于数学家来说向量是一个数组,数组的长度代表向量所在的空间维度。程序中表示向量通常有两种方式,行向量($Row Vector$)和列向量($Column Vector$),至于为什么要区分两种书写方式,我们放到矩阵章节再详细说明.

$V_{column} = \begin{bmatrix}1\\ 2\\ 3\end{bmatrix}$

$V_{row} = \begin{bmatrix}1&2&-1\end{bmatrix}$

几何定义

从几何学上讲,向量是具有大小和方向的有向线段.讨论向量在空间中的哪个位置,是没有意义的,向量不具备位置属性.向量是一种相对偏移量的表示方法.如下图二维笛卡尔坐标系中,向量U和V是相等的.

阅读全文 »

基础知识

指数法则

  1. $b^0=1$

  2. $b^1=b$

  3. $b^xb^y=b^{x+y}$

  4. $\frac{b^x}{b^y}=b^{x-y}$

  5. $(b^x)^y=b^{xy}$

对数法则

  1. $b^{\log_by}=y$

  2. $\log_b1=0$

  3. $\log_bb=1$

  4. $\log_b{(xy)}=\log_bx+\log_by$

  5. $\log_b(\frac{x}{y})=\log_bx-\log_by$

  6. $\log_b(x^y)=y\log_bx$

  7. $\log_bx=\frac{\log_cx}{\log_cb}$

  8. $\log_xy=\frac{1}{\log_yx}$

e

关于e的四个定义:

$\lim_{h \to \infty}(1+\frac{r}{h})^h=e^r$

$\lim_{h \to 0}(1+rh)^{\frac{1}{h}}=e^r$

$\lim_{h \to \infty}(1+\frac{1}{h})^h=e$

$\lim_{h \to 0}(1+h)^{\frac{1}{h}}=e$

对数函数和指数函数求导

对数函数和指数函数求导

阅读全文 »

三角函数的极限

小数的情况

${\lim_{x \to 0} \frac{sinx}{x}} = 1$

$\lim_{x \to 0} cosx = 1$

$\lim_{x \to 0} \frac{tanx}{x} = 1$

$\lim_{x \to 0} \frac{1-cosx}{x} = 0$

大数的情况

考虑极限$\lim_{x \to \infty}$

对于任意的x $-1 <= sinx <=1$ $-1 <=cosx <= 1$

应用三明治定理 $\lim_{x \to \infty} \frac{sinx}{x} = 0$

其他情况

考虑极限$\lim_{x \to \frac{\pi}{2}}\frac{cosx}{x-\frac{\pi}{2}}$
这次的三角函数是余弦, 且要在 π/2 的附近求值. 这既不是小数的情况也不是大数的情况, 因此很明显, 之前的情况都不适用.面对 x → a 的极限, 而a != 0 时, 有一个很好的一般原则, 那就是用 t = x − a作替换, 将问题转化为 t→0

阅读全文 »
0%