美文网首页
OpenGL之3D数学

OpenGL之3D数学

作者: 瀚_ | 来源:发表于2019-07-05 15:06 被阅读0次

    向量

    • 向量是既有大小又有方向的量。

    零向量与单位向量

    • 模等于0的向量为零向量,模等于1的向量叫做单位向量。注意零向量的方向是任意的。
    • 由一个向量v求与它同方向的单位向量过程称为标准化(normalization),这个单位向量为标准化向量(normalized vector)。

    向量点积(dot product)

    • 向量点积的结果是一个标量,其定义为:A.B = |A||B|cosθ
      向量点乘.png

    向量叉积(cross product)

    • 两个向量a和b的叉积,结果是一个向量c = a x b,c的方向垂直于a 和 b,它需要根据右手规则确定。c的大小等于|c| = |a||b|sinθ
    • 右手规则是指将向量a与b放在同一个起点时,当右手的四个手指从a所指方向转到b所指方向握拳时,大拇指的指向即为a x b的方向
      右手规则.jpg
    • 在利用以坐标形式表示向量a和b时,在3D空间中,叉积的结果用矩阵表示为:


      叉乘.png

    行向量和列向量

    • 1 x n的矩阵称之为行向量,n x 1的矩阵称为列向量。
    • OpenGL编程中习惯用列向量表示点或者向量。矩阵在内存中以列优先存储,但是具体传递参数时,一般函数提供了是否转置的布尔参数来调整存储格式。例如void glUniformMatrix4fv函数提供了布尔变量 GLboolean transpose 来表示是否转置矩阵。

    零矩阵和n阶单位矩阵

    • 一个矩阵,如果所有元素都为0,则为零矩阵。
    • 对于一个n阶方阵,如果主对角线元素全为1,其余元素都为0则称为n阶单位矩阵。
    • 对于一个矩阵A,存在单位矩阵E满足:EA=AE=A
    • 任意矩阵A与对应的零矩阵相乘得到零矩阵。

    矩阵转置

    • 转置操作即是将矩阵的行和列互换。


      矩阵转置.png

    矩阵运算

    • 两个矩阵A和B要能执行加减法,必须是行和列数目相等,计算过程,即对应的元素相加(Aij+Bij)或者相减(Aij−Bij)
    • 用一个数k乘以矩阵A,结果为矩阵A中每个元素乘以数k。
    • 两个矩阵Amxn和Bnxp要执行乘法操作,需要满足:左边矩阵的列数和右边矩阵的行数相等。
      矩阵相乘.png

    行列式

    行列式.png

    逆矩阵

    • 对于n阶方阵A,如果存在一个n阶方阵B使得:AB = BA = E 成立,则称B是A的逆矩阵,矩阵A是可逆矩阵,或者说矩阵A是非奇异矩阵(Nonsingular matrix)。
    • 只有n阶方阵才有逆矩阵的概念。n阶方阵A可逆的充要条件是A的行列式|A|≠0.
    • 在3D图形处理中,用一个变换矩阵乘以向量,代表了对原始图形进行了某种变换,例如缩小,旋转等,逆矩阵表示这个操作的逆操作,也就是能够撤销这一操作。例如对一个向量v用矩阵M相乘,然后再用M−1相乘,则能得到原来的向量v: M−1(Mv)=(M−1M)v=Iv=v
    • 当用矩阵A,B,C转换向量v时,如果v用行向量记法,则矩阵按转换顺序从左往右列出,表达为vABC;如果v采用列向量记法,则转换矩阵应该放在左边,并且转换从右往左发生,对应的转换记为CBAv。

    正交矩阵

    正交矩阵.png

    向量组的线性组合

    • 向量组是一组向量的集合,例如α1,α2,⋯,αm表示一个由m个n×1的矩阵(n维列向量)组成的列向量组。对应的也有行向量组的概念。如果存在一组实数λ1,λ2,⋯,λm,使得向量β满足下式:
      β=λ1α1+λ2α2+⋯+λmαm
      则称向量β是α1,α2,⋯,αm的线性组合,或者说β由α1,α2,⋯,αm线性表示

    向量组线性无关

    • 对于向量组α1,α2,⋯,αm,如果存在不全为零的数λ1,λ2,⋯,λm,使下面的等式成立:
      λ1α1+λ2α2+⋯+λmαm=0
      则称向量组α1,α2,⋯,αm线性相关(linearly dependent), 否则称为线性无( linearly independent)。也就是要使向量组α1,α2,⋯,αm线性无关,那么所有的系数λi都必须为0。

    线性空间的基

    • 如果在线性空间V中存在n个线性无关的向量α1,α2,⋯,αn使得V中任意元素α都能由他们线性表示,则称α1,α2,⋯,αn为V的一个基。基所含向量个数n称为线性空间V的维数,并称V为n维线性空间。

    线性变换

    • 线性变换 T: U→V是一个函数,将定义域U中元素,映射到值域V中,并满足下列两个条件:
      1)可加性 对任意u1,u2∈U,都满足: T(u1+u2)=T(u1)+T(u2)
      2)齐次性 对任意u∈U和任意标量k,都满足: T(ku)=kT(u)

    线性变换与矩阵一一对应

    • 对一个线性变换T,存在一个矩阵A与之对应,变换表示为T(x)=Ax,其中x为列向量。
    • 线性变换由基及变换后基的值唯一确定,通过计算线性变换后基的值可以得到线性变换对应的矩阵A
    • 可以通过计算 A=(T(u1),T(u2),⋯,T(un))来获取线性变换T对应的矩阵A。

    仿射变换

    线性变换无法表达一类重要的变换——平移变换。平移变换表达的是对于点p=(x,y,z)经过d=(αx,αy,αz)所表示的位移后得到点p′=(x′,y′,z′)的过程,表示为:
    p′=p+d

    我们尝试寻找变换T
    满足:T(x) = Ax = p′ = | x+αx |
    | y+αy |
    | z+αz |
    当d≠0时,上式中T(0)≠0,由式子1可知,这不是线性变换。因此需要引入仿射变换的概念。

    齐次坐标(homogeneous coordinate)

    齐次坐标.png

    4x4矩阵表示仿射变换

    4x4矩阵表示仿射变换.png

    来自:
    OpenGL学习脚印: 坐标和变换的数学基础(math-coordinates and transformations)
    OpenGL学习脚印: 向量和矩阵要点(math-vector and matrices)

    相关文章

      网友评论

          本文标题:OpenGL之3D数学

          本文链接:https://www.haomeiwen.com/subject/bhjshctx.html