图形学的数学基础(七):极坐标系
图形学的数学基础(六):mvp变换
图形学的数学基础(六):mvp变换
图形学的一个重要任务是将三维空间中的模型映射到二维平面(以像素为单位),这是一个复杂的过程,取决于许多因素,包括但不限于相机的位置,方向,投影的类型(正交/透视),fov,和viewport宽高,对于所有复杂的矩阵变换,最好的做法是将其分解为几个更简单的矩阵乘积。大多数图形系统通过使用四个转换序列来实现mvp变换,以openGL为例:
worldMatrix:将视图从模型空间转换到世界空间。直白的说就是将模型摆放到世界坐标空间。这一步确立了世界空间中各模型的相对布局,摆放位置。
viewMatrix:将视图从世界空间转换到相机空间。简单来讲就是:我们从何处,以什么样的视角观察世界。
Projection:将视图从相机空间映射到$[-1,1]^3$,的单位立方体中,为下一步viewport变换做准备。
viewport: 将视图从单位立方体映射到所需的屏幕空间($screenSpace$),取决于输出图像的大小和位置。
视图变换
现实生活中,如果相机和所有物体一起移动(相对位置关系不变),则拍出来的照片也都是一样的。根据这个原理我们得出:将相机移动到原点,朝向-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})$
图形学的数学基础(四):矩阵线性变换
图形学的数学基础(三):矩阵
图形学的数学基础(三):矩阵
不幸的是,没有人能够告诉我们矩阵是什么。你必须亲自去看看。 -墨菲斯《黑客帝国》
矩阵在图形学中具有重要意义,它们主要用于描述两个坐标空间之间的转换关系,通过矩阵和向量相乘,可以将向量从某一坐标空间转换到另一个坐标空间。通过矩阵和矩阵相乘,可以描述一系列的变换动作。
数学定义
在线性代数中,矩阵是排列成行和列的矩形数字网格。矩阵可以定义为数字的二维数组。因此向量是标量的数组,而矩阵是向量的数组。
矩阵维度和表示法
通过计算矩阵包含的行数和列数来定义矩阵的大小,对于具有$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}$称为标准正交基的基矢量.
为什么需要标准正交基
定义这样的坐标系,带来的一点好处就是, 空间中任意一矢量,都可以分解到标准正交基的三个轴上,需要用到前边向量投影的相关知识. 即矢量可以表示为基矢量的线性组合.
$||\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是相等的.
指数函数和对数函数
基础知识
指数法则
$b^0=1$
$b^1=b$
$b^xb^y=b^{x+y}$
$\frac{b^x}{b^y}=b^{x-y}$
$(b^x)^y=b^{xy}$
对数法则
$b^{\log_by}=y$
$\log_b1=0$
$\log_bb=1$
$\log_b{(xy)}=\log_bx+\log_by$
$\log_b(\frac{x}{y})=\log_bx-\log_by$
$\log_b(x^y)=y\log_bx$
$\log_bx=\frac{\log_cx}{\log_cb}$
$\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