设f是一个矢性(值)函数,若它可以表示为f(x1,x2,…,xn)=A1x1+A2x2+…+Anxn+b,其中Ai可以是标量,也可以是矩阵,则称f是仿射函数。
其中的特例是,标性(值)函数f(x)=ax+b,其中a、x、b都是标量。此时严格讲,只有b=0时,仿射函数才可以叫“线性函数”(“正比例”关系)。
就一般情形,函数f是仿射函数的充要条件是:对于任意两组向量x1,x2,…,xn与y1,y2,…,yn,对于任意0<=p<=1,如果f[px1+(1-p)y1,px2+(1-p)y2,…,pxn+(1-p)yn]==pf(x1,x2,…,xn)+(1-p)f(y1,y2,…,yn)。(“==”表示恒等)
一般称线性组合“p1x1+p2x2+…+pnxn,其中p1+p2+…+pn=1”为仿射组合;一般称所有pi>=0的仿射组合为凸组合。
其实一般意义上的仿射函数是一个矩阵函数,如果构成一个类似LMI的不等式,可以成为仿射矩阵不等式.
这是对 MIT Foundation of 3D Computer Graphics 附录B的翻译,本附录讲解了2D/3D仿射函数的基础知识。本书内容仍在不断的学习中,因此本文内容会不断的改进。若有任何建议,请不吝赐教 ninetymiles@icloud.com
已经完成的章节
在12章和13章中,我们讨论了变异变量的线性插值。要理解那种材料,我们首先需要学习关于仿射函数的一些简单的概念。
只要函数 是下列形式,我们就将函数 作为变量 和 的仿射函数
这个函数拥有常量 和 。这个表达也可以被记作
这样一种函数经常被称作“线性”,因为包含额外的附加常量项( ),我们因而使用术语仿射(affine)。相同的项-仿射(affine)-被用于第三章的仿射变换,因为那些变换允许额外的常量项,在那种上下文中,其表达了平移变换。
很明显在某个 处评估这样一种函数 的方式为只是把变量 插入方程(B.1)中。在平面中沿着某条直线(比如说沿着三角形的一条边,或者沿着一条水平线)以平均间隔的步骤前进并且在每个步骤上快速评估函数 。实际上,因为函数是仿射的,每次我们沿着一个固定的单位矢量移动,函数 以某种固定量改变。
我们已经看到了2D仿射函数的例子。回忆一下,从第11章开始,3D投射变换映射3D中的同平面物体到3D中的同平面物体。如此,给出一个3D中的三角形和一个选定的眼睛帧和投射矩阵,一个3D中三角形上的点上的值 为那个点上的值 的仿射函数。
如果我们给出值 ,针对 平面上3个点(非同线性)的函数 的值,比如说三角形的顶点,这确定了整个平面上的函数 。在这种情形中,我们说函数 为3个顶点上的值的线性插值体。评估3个顶点的线性插值体被称作线性插值。
计算3个顶点坐标 上的函数 ,我们拥有
通过反转表达式,给出 和 ,我们可以明白怎样决定 的值
如果一个函数 是下列形式的,我们就说这个函数 在变量 和 中是仿射的
这个函数具有常量 和 。这个函数被位于3D中四面体的4个顶点上的值所唯一确定。
给出3D中的三角形,假设我们指定了3个顶点上的函数值。可能存在很多在 中仿射的函数,它们在这3个函数值上一致。但是当被限制到三角形平面上时,所有这些函数会一致。如此,我们可以称三角形上这个被限制的函数为顶点上的线性插值体。我们仍然可以用方程(B.3)中的形式来记录,虽然常量不再是唯一的。
在小节6.3我们的顶点着色器中,返回3D计算机图形和变异变量(varying variable),当我们把三角形的每个顶点关联上一种色彩,最自然的解释为我们希望三角形内部点的色彩被三角形上唯一的线性插值函数所确定,这个函数在物体坐标 上是仿射的。
在计算机图形中,我们可以使用纹理映射把一个纹理粘贴到一个三角形上。在此处理中,我们关联两个值,被称为纹理坐标, ,到三角形中的每个点上。如果我们通过把纹理坐标关联到三角形的每个顶点上来指定这种粘合动作,最自然的解读是针对三角形内部点的纹理坐标我们希望使用三角形上对应的唯一的插值函数来确定,这些插值函数在 中是仿射的,
作为一种相当自我参照的例子,我们甚至将三角形中一个点的三个物体坐标的每个都当作 中的仿射函数。例如 (也就是说,当 时, )。这意味着在我们的顶点着色器中, vPosition 中的3个顶点应该被解读为在 坐标值上的3个函数。
针对这个原因,OpenGL的默认语义为插值所有变异变量为三角形上的函数,这些函数在 中是仿射的。正如我们会在下面小节B.5中会看到的,这等价于在眼睛坐标 上仿射的一个函数,但是并不等价于在标准化设备坐标 上的函数。
当被限定到3D中的一个三角形时,如果我们拥有在变量 中并行的函数 ,那么我们可以使用三角形是平面的事实将 记为只在两个变量上仿射的一个函数。例如,当被投射到 平面时,假设三角形拥有非零区域,那么,在3D中三角形的每个点上, 的值本身是变量 上的仿射函数,比方说 。对于 你可以采用这种表达式,并且你可以把它插入到针对函数 的仿射表达式中。这给出了我们下面形式的函数
这个表达式针对某种常量 。在这个步骤被完成后,对 值的依赖消失,剩下的就是 变量上的某种仿射函数。理解了这些,我们可以使用方程式(8.2)直接计算合适的 因子。
假设我们拥有下列形式的某个矩阵表达式
这种表达式针对某种 矩阵M(此处M甚至不必是仿射矩阵)。那么,只要独立地观察矩阵中的4行内容,我们就会看到 和 为 的并行函数。
如果我们拥有在变量 中仿射的函数 ,那么,给出方程(B.4)中的关系,我们可以看到函数 在 中也是仿射的(实际上是线性的)。要理解这种情形,注意:
表达式针对某种值 。
我们不得不注意的唯一时刻是当除法被完成的时候。例如,给出关系
通常不是这种情形:函数 在变量 中是仿射的也会在变量 或 中是仿射的。在第13章中我们会看到这种非仿射函数如何可以被有效求得其值。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)