一. 1D数学
很久以前,牧羊人为了“数羊”而产生了自然数,一只羊,两只羊,三只羊……。 当羊非常多时,人们意识到这样数羊不行,于是放弃了计数而是用“很多羊”来代替。 不同的文明在不同点放弃了计数,智者定义了“零”的概念,即没有羊。 人们习惯性的把羊放成一排来计数,这导致了数轴概念的产生。 如果你要要卖你的10羊,而你其实并没有羊,这就产生了债务和负数的概念,你拥有“负十”只羊,这种情况又导致了整数的产生:由自然数和他们的相反数(负数)组成。 贫穷使有的人买不起整只羊,只能买的起四分之一只羊,这就产生了分数。比如2/5,134/1000等,为了方便,人们又发明了小数点表示法,用“3.1415”来代替冗长的31415/10000. 再后来,人们发现某些数字无法用有理数表示,比如π,这就产生了所谓的实数,实数包含有理数和π这样的无理数。 有理数可数,而实数不可数。 研究自然数和整数的领域称为离散数学,研究实数的领域称作连续数学。 也许宇宙中就存在着一个超越我们科技的文明,他们从来没听说连续数学,基本微积分理论,甚至是无限这样的概念,他们从不使用π,而是使用3.14159(或更精确些:3.1415926535897932382626433)就可以构造完美的世界。 为虚拟世界选择度量单位的关键是选择离散的精度,有一种错误的观点认为short,int是离散的,而float,double是连续的,而实际上这些数据都是离散的。 以前的计算机图形学教材通常建议选择整数,因为那时硬件处理浮点数的的能力要比处理整数弱,但对于现在的硬件,这种说法已经过时了。 计算机图形学第一准则:近似原则,如果它看上去是对的那它就是对的
二. 2D笛卡尔数学
2D笛卡尔坐标系的两条定义: 1.每个2D笛卡尔坐标系都有一个特殊的点,称坐原点,它是坐标系的中心。 2.每个2D笛卡尔坐标系都有两条过原点的直线向两边无限延伸,称作“轴”(axis)。 所有2D坐标系都是等价的。例如,两个2D坐标系A和B,旋转坐标系A,总能使七x,y轴的指向和B的相同(假设坐标轴互相垂直)
三. 从2D到3D
左手坐标系和右手坐标系: [ 3D坐标系之间是不一定等价的。如果同属于左手坐标系或右手坐标系,则可以通过旋转来重合,否则不可以。 左,右手坐标系可以相互转换,最简单的方法是只翻转一个轴的符号。注意如果同时翻转两个轴的符号,结果和不翻转是一样的。 不同领域使用不同的坐标系,传统的计算机图形学使用左手坐标系,而线性代数则倾向于使用右手坐标系。 当三维图形以左手坐标系渲染至二维屏幕时,,z轴坐标增加意味着场景的深度增加(即与虚拟摄像机的距离增加),此特性会应用到z缓冲方案中,以解决深度遮挡。 参考书籍:《游戏引擎架构》 《3D Math Primer for graphics and game development》