美文网首页
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笔记十:OpenGL ES初探

    前言 期待您移步上篇:OpenGL笔记九:3D数学小记 OpenGL ES OpenGL ES允许应⽤程序利⽤底层...

  • OpenGL 之3D数学

    3D数学和图像图形的关系 对于学习OpenGL 有一个误区,就是大家认为如果不能精通那些3D图形数学知识,会让我们...

  • OpenGL之3D数学

    向量 向量是既有大小又有方向的量。 零向量与单位向量 模等于0的向量为零向量,模等于1的向量叫做单位向量。注意零向...

  • 02总结--010--OpenGL 基础变换:向量和矩阵的深入理

    在正式进入本章节内容之前,先来正视几个观念。 1. 3D 数学在OpenGL中充当什么角色? 对于学习OpenGL...

  • OpenGL学习之3D数学

    一:向量的记法 通常使⽤下标法来引⽤向量量的某个分量⽐比如,a1 = 1;a2 = 2 ; a3 = 3实际开发中...

  • OpenGL向量、矩阵应用

    一、3D数学 3D数学.在图像图形开发中的充当了什么⻆色?对于学习OpenGL 有一个误区,就是大家认为如果不能精...

  • OpenGL 3D数学

    1.标量与向量相乘 k * [x, y, z] = [x, y, z] * k = [kx, ky, kz] 2....

  • OpenGL中的向量和矩阵

    OpenGL坐标变化时经常用到矩阵来计算变化后点的位置,为了更好的理解3D数学在OpenGL中的作用,本文将简单地...

  • OpenGL 3D数学篇

    1

  • OpenGL ES Android 第一课

    官网镇楼OpenGL 简介 openGL 与 OpenGL ES 区别 OpenGL 跨平台的高性能3D渲染AP...

网友评论

      本文标题:OpenGL之3D数学

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