空间变换是图形学的基础,也是必须掌握的知识点,个人总结一下其实分为以下几点:(纯属个人理解)
1.什么是空间,为什么图形学要用到那么多空间,为什么不能在一个空间下完成?
其实所谓的空间其实就是由一个原点加三个相互垂直的向量组成的坐标系,在图形学里用到很多空间概念,比如模型空间,世界空间,视图空间,UV空间,切线空间等等,之所以用到如此多的空间概念归根结底只有一个原因就是在不同阶段的关注点不同,举个例子:比如在模型空间,美术同学在制作一个模型的时候不会关心这个模型在世界空间下与其他模型的位置关系,也不会关心这个模型被相机看到时的远近关系,他只关心模型本身的一些信息,比如模型的顶点位置,组成三角面的关系,法线的位置。
2.为什么要做空间变化?
举个例子:同一条法线,它在世界空间和切线空间中的描述是不同的,可当我们需要将不同空间里的一些信息收集后进行处理时,比如光照运算,我们需要将观察向量,入射向量,法向量(这里我们默认假设使用法线贴图里的法向量,并且使用的是切线空间中下生成的法线贴图),代入公式进行运算,显然我们如果直接使用法线贴图中的法向量和观察向量,入射向量计算,得出来的颜色一定是错误的,因为观察向量,入射向量是世界坐标系下的,而法线贴图中的法线是切线空间下的,就好比1+two,你说它的结果是啥?(当然不管是什么,肯定不是我们想要的结果),这时候我们就需要进行一个转换, 先将法向量和观察向量,入射向量放到同一个空间下然后再进行计算。(我们可以将法线切图下的法线转换到世界空间下,也可以将观察向量,入射向量转换到切线空间下,然后再计算,这两种方式都对)
3.为什么我们要学习向量、矩阵的运算?
很多人在不理解为什么要学习矩阵运算的情况下就开始看矩阵的知识,然后就有一部分人在学习的过程中放弃了,事实图形学里用到的矩阵没有那么复杂,因为我们用到矩阵一般都是用来做空间变换,而我们定义的空间的坐标系都是标准正交矩阵,所以你不需要为了求逆矩阵而死磕伴随矩阵,你只要求它的转置矩阵就行了。至于向量的用法,在变换中可以用于投影或构建坐标系,详情可以看我先前的图文章:形学基础-向量篇。
那么具体如何转换呢?
假设有父空间A,它有一个子空间C,(空间C的三个轴在A空间的表示分别为向量B,向量T,向量N, 且BTN为单位相量),那么A空间中的一个向量a在C空间中对应的向量c表示是什么?
通过投影的方式,其实我们可以知道向量c是(\(\vec{a}\cdot\vec{B})\cdot\vec{B}+(\vec{a}\cdot\vec{T})\cdot\vec{T}+(\vec{a}\cdot\vec{N})\cdot\vec{N}\),设它在三个轴的上值分别为B’, T’, N’我们把它分行写:
\begin{matrix}
\vec{a}\cdot\vec{B}=B^{'}\\
\vec{a}\cdot\vec{T}=T^{'}\\
\vec{a}\cdot\vec{N}=N^{'}
\end{matrix}
仔细观察我们可以用矩阵形式表示
\[\begin{bmatrix}B^{'}\\ T^{'}\\ N^{'}\end{bmatrix}=\begin{bmatrix}B_{x}&B_{y}&B_{z}\\ T_{x}&T_{y}&T_{z}\\ N_{x}&N_{y}&N_{z}\end{bmatrix}\cdot \begin{bmatrix}a_{x}\\ a_{y}\\ a_{z}\end{bmatrix}\]
所以父转子的变化矩阵就是求出子在父空间下的坐标轴向量,按行排列的矩阵
那么子转父的变化就是这个矩阵的逆矩阵,前面说过,由于B,T,N三轴两两垂直,所以该矩阵为正交矩阵,正交矩阵的逆矩阵是它自身的转置矩阵,所以我们只要把B,T,N,按列排成矩阵即可得到从子空间到父空间的变化矩阵
\[\begin{bmatrix}B_{x}&B_{y}&B_{z}\\ T_{x}&T_{y}&T_{z}\\ N_{x}&N_{y}&N_{z}\end{bmatrix}^{-1}\cdot\begin{bmatrix}B^{'}\\ T^{'}\\ N^{'}\end{bmatrix}=\begin{bmatrix}a_{x}\\ a_{y}\\ a_{z}\end{bmatrix}\]
\[\begin{bmatrix}B_{x}&B_{y}&B_{z}\\ T_{x}&T_{y}&T_{z}\\ N_{x}&N_{y}&N_{z}\end{bmatrix}^{T}\cdot\begin{bmatrix}B^{'}\\ T^{'}\\ N^{'}\end{bmatrix}=\begin{bmatrix}a_{x}\\ a_{y}\\ a_{z}\end{bmatrix}\]
\[\begin{bmatrix}B_{x}&T_{x}&N_{x}\\ B_{y}&T_{y}&N_{y}\\ B_{z}&T_{z}&N_{z}\end{bmatrix}\cdot\begin{bmatrix}B^{'}\\ T^{'}\\ N^{'}\end{bmatrix}=\begin{bmatrix}a_{x}\\ a_{y}\\ a_{z}\end{bmatrix}\]
文章评论