标签:
计算机图形实质上就是将一堆顶点及顶点信息输入, 而后输出几何体。
几何体实质上是一系列点的集合, 这些点位于三维空间内,要想得到一个看起来很精致的几何体, 就需要对这些点有一个精确的数学表达, 但是在计算机中数其实是离散的, 也就是说计算机表达的并不是实数,而只能表达有限位数的有理数, 所以在可能的情况下要做到尽可能的近似, 让这个几何体看上去足够精致, 也就ok了。
两个概念的区别:
点和向量在代数和几何中的不同:在代数中这两个概念其实是等价的, 但是在几何中向量和点并不是等价的概念, 点表示的是位置, 而向量表示的是方向和长度, 向量表示的是原点到点的位移, 但位移的顺序没有差别, 因为向量没有位置信息, 所以向量在不改变大小和方向的前提下可以自有的移动。
2D和3D坐标系的区别:3D坐标系并不是仅比2D多了一个维度, 增加了50%的复杂度, 事实是相比2D空间, 3D空间更难以认识和描述,2D和3D中的坐标系区别, 2D坐标系是等价的(能通过旋转来重合), 但是3D却不都是等价的(左手坐标系不能通过旋转来变换到右手坐标系, 左手坐标系和右手坐标系并没有好坏之分, 在不同的场景有不同的需求)。
如何表示点? 描述一个物体的话需要描述该物体上所有点, 描述点的话需要坐标系, 在这里我们需要使用多个坐标系来表示点, 为什么使用多个坐标系:各种坐标系都是有用的, 因为某种信息只能在特定场景中有意义, 对于一个特殊点, 也许不知道它在世界坐标系中的位置, 但可能知道它在其他坐标系中的位置。
选择坐标系:有多种坐标系可供选择, 比如物体坐标系, 世界坐标系、观察坐标系、惯性坐标系, 这些坐标系都有各自的用途
世界坐标系:一个特殊的坐标系, 建立了描述其他坐标系所需要的参考框架, 世界坐标系不必包含整个世界, 但是却包括了我们所关心的所有物体, 将所有物体放到一起来的好处是可以方便的计算物体之间的相对关系。
物体坐标系:和特定物体相关联的坐标系, 当物体移动或改变方向时, 和该物体相关联的坐标系将随之移动或改变, 物体坐标系以物体中心为原点, 对建模和相对于物体本身运动的计算带来极大便利。
摄像机坐标系:和观察者密切相关的坐标系, 即观察者视角。在摄像机坐标系中, x轴向右, y轴向上, z轴向内(z轴作为深度轴)。
惯性坐标系:为了简化世界坐标系到物体坐标系的转换, 引入了一种新的坐标系, 称为惯性坐标系, 意思是在世界坐标系到物体坐标系的“半途”, 惯性坐标系的原点和物体坐标系重合, 但惯性坐标系的轴平行于世界坐标系的, 惯性坐标系坐标轴平行于世界坐标系, 以物体中心为坐标原点, 便于将物体坐标系转换到世界坐标系,在不同的情况下使用不同的坐标系会提供极大的便利。
坐标系变换:既然对于坐标系我们有多种选择, 那么对于处于不同坐标系的物体要一起处理的话, 那么我们需要将他们变换到同一个坐标系中才能进行处理, 这个坐标系不要求一定要是世界坐标系, 但要是一个坐标系, 比如如果我们要观察一个几何体, 这个几何体需要经过几个坐标系的变换, 几何体的输入是一个局部坐标, 也就是物体坐标, 首先需要将几何体从物体坐标系变换到世界坐标系中,从世界坐标系转化到观察坐标系, 做投影到投影坐标系。那么物体要如何进行坐标系变换呢? 使用矩阵!
为什么使用矩阵:
矩阵是什么?矩阵是3D数学的重要基础, 主要用来描述两个坐标系统间的关系, 通过定义一种运算而将一个坐标系中的点转换到另一个坐标系中。矩阵是向量的线性组合, 矩阵并不神秘, 只是用一种紧凑的方式来表达坐标转换需要的数学运算。
向量运算:
数乘:缩放
点乘:计算夹角
叉乘:计算法向量
矩阵的几种形式:
方阵:行数和列数相同的矩阵, 只有方阵才有行列式, 有行列式才有代数余子式, 才有伴随矩阵, 才有逆矩阵。
对角矩阵:所有非对角元素都为0.
单位矩阵:特殊的对角矩阵, 对角元素都为1.乘法单位元, 任何矩阵乘以单位矩阵结果都是自己。
矩阵的操作:
转置:行变列,两个矩阵乘积的转置 == 先将两个矩阵转置然后以相反的顺序乘, 有什么用呢? 计算矩阵的逆
行列式:矩阵的标量, 行列式的几何意义:2D中表示矩形的面积, 3D中表示几何体的体积
余子式:去掉一个元素所处的一行一列, 剩余的矩阵
代数余子式:余子式的行列式, 代数余子式可以用来计算矩阵的行列式(这个好像废话)
逆:伴随矩阵/矩阵的模, 矩阵的逆是非常有用的, 可以用来撤销之前的计算。而一般矩阵的逆的计算是很复杂的, 需要一个简单的方式来计算, 这就是矩阵的转置矩阵了, 正交矩阵的转置矩阵和逆矩阵相同, 旋转和镜像矩阵是正交的, 正交性检测需要复杂运算, 能够通过行为来判定会快很多。。
正交化:因为在计算机中数是离散的, 所以在对数据进行处理时, 难免会出现一些误差, 在对矩阵进行处理的时候, 有时会破坏矩阵的正交性, 这时就需要对矩阵进行正交化处理。
矩阵乘法仅能表达线性变换。即使是在4D中, 矩阵乘法依然是线性变换。 矩阵乘法不能表达4D中的平移, 4D零向量也将总是被变换为零向量, 这个技巧之所以能在3D中平移点是因为实际上是在切变4D空间。
方位变换的表示方式:矩阵、欧拉角、四元数,三种方式可以相互转换,注意在欧拉角中会有万向锁的问题,
万向锁:
在使用欧拉角旋转的过程中, 当外层的两个轴旋转到重合的时候, 第三个轴的旋转被限制到了90度的范围。
万向锁是一个底层的问题, 只能避免, 无法彻底解决。
用三个数来表示3D方位一定会导致万向锁。
图形数学基础简述
标签:
原文地址:http://www.cnblogs.com/lb910211/p/4757464.html