【D3D学习记录】入门3D编程的基本数学知识(1)-坐标系

入门3D编程的基本数学知识(1)-坐标系

bluekitty(不若人生一场醉) @ CSDN

 

 本文主要记录了一些与D3D相关的基本且重要的数学知识,目的是为了入门3D编程。分多个部分。

 

1、笛卡尔坐标系

      可能你并没有听说过笛卡尔坐标系,但如果你对Windows GDI编程比较熟悉的话,一个词你肯定不陌生-各向同性坐标系,GDI使用的各向同性坐标系就是一类笛卡尔坐标系。与GDI坐标系不同,笛卡尔坐标系不但可以是直角坐标系,也可以是斜角坐标系,但坐标系各个数轴的单位刻度必须一样。我们初中学的平面直角坐标系实际上就是平面直角笛卡尔坐标系,拓展到三维空间,由三条互相垂直的数轴(且每一个数轴的单位刻度都相等)所定义的坐标系称为空间笛卡尔直角坐标系。

      在计算机图形领域,除非有特殊说明,否则都是使用平面(二维)或空间(三维)笛卡尔直角坐标。这里“空间”的概念是狭义的,只不过是习惯上称呼,广义上讲,1,2,3....n维的线性空间都是“空间”,平面也可以称为平面空间。下文所说的任何坐标系都是指笛卡尔直角坐标系。

 

2、世界坐标系

      世界坐标系是用来描述一个空间的,任何一个位于这个空间内的物体都可以用世界坐标系来描述其位置和朝向,但在这个空间内,除了世界坐标自身,不存在能够描述世界坐标系的另一个坐标系,即世界坐标系是这个空间的“极大坐标系”,在这个空间内,世界坐标系永远不会发生变化,所以世界坐标系也被称为全局坐标系或参考坐标系。

      注意以上所说的“这个空间”,“这个”这个词本身就带有参考的意思,也就是说,这里所说的世界坐标系也不是真正意义上的“世界坐标系”,在一个具体的环境中,如果一个坐标系能够描述所有位于这个环境内的物体,那它就是这个环境的世界坐标系,就如同下面所说的物体坐标系,对于物体被放入的这个空间而言,物体坐标系是局部的,但对于物体内部的任何一个组成部分而言,物体坐标系这个局部坐标系就是它们的世界坐标系。

 

3、物体坐标系

      如同名字一样,物体坐标系总是和一个具体的物体联系在一起,在某一个世界坐标系描述的空间内,每一个该空间内的物体都有自身的物体坐标系,当物体在空间内(指由某一个世界坐标系描述的那个空间,下面不再说明)运动时(平移、旋转),这个物体的物体坐标系也将随之一起运动,对于世界坐标系而言,物体的每一个组成部分都可能发生了坐标变化(旋转时旋转轴的坐标不变),而对于物体坐标系而言,组成物体的任何部分都没有发生坐标变化(这里物体指刚体,柔体不在讨论范围内,即物体的形状、面积、体积均不会变化),变化的只是前后左右上下的指向。很明显,当物体只在空间内平移时,物体的朝向都不会发生变化,只有旋转时朝向才会改变。

      为什么有了世界坐标系了还要牵扯进来物体坐标系?世界坐标系不是可以描述任何一个空间内的物体么?首先从人的习惯来说,在现实中人总是混合着世界坐标系和物体坐标系,例如大街上有个人向你问路“我要去KFC怎么走?”,你会说“从这条路一直向北,在路口右拐,左手第一家就是”,向北是参照世界坐标系,而右拐和左手是参照那个人自身的物体坐标系。另外一个角度来说,现在流行“重用”,如果你要在一个空间中放置一辆汽车的模型,你不必自己去建造这个汽车的模型,因为有前人造好的模型,完全可以拿来用,但造模型的那个人根本不知道你所定义的世界坐标系,他只知道他造这个汽车模型时所使用的世界坐标系,在模型造好后,这个世界坐标系就固定于物体内部成为模型的物体坐标系,所以你要重用这个模型就必须了解它的物体坐标系。

      上面所说的问路的例子,为什么一般情况下得到的回答是混合着世界坐标系和物体坐标系呢?因为用世界坐标系(东南西北)描述一连串的运动比用左右、前后、上下来描述要复杂,所以人的潜意识里就会放弃用世界坐标系来描述而改用物体坐标系来描述。假如一个空间内有一个人的模型,要完全参照世界坐标系来描述人的运动会非常复杂,因为人有数百个关节可以运动,而某一个关节的运动会带动数个关节一起运动,如果把世界坐标系和人体模型的各个组成部分的物体坐标系按照一定的层次关系排好,一个部分的运动只参照它的上一层坐标系,那么这个问题就会简单的多,而且直观。例如,那个人体模型需要动一动食指,因为食指属于手,只需指定一个参照“手”这个物体坐标系的运动就可以了,不用去管对于世界坐标系而言,这个食指是怎么运动的,也不用去管手腕动没动,身体动没动或者这个模型动没动。 

 

4、惯性坐标系

      一个位于某个空间内的物体,它的运动是旋转和平移的组合,这个运动是反映在世界坐标系里的,如何把物体坐标系转换到世界坐标系或反向转换?为了降低处理这个问题的难度,可以把旋转和平移这两种运动分开来处理,加入惯性坐标系的概念可以做到这一点。惯性坐标系的原点在物体坐标系的原点(或口头叫的中心,一个意思,这个中心的初始位置不一定与世界坐标系的原点重合,要看当时这个物体是如何建模的),而惯性坐标系的数轴只可能与世界坐标系的数轴重合或平行且指向相同。不难看出来,惯性坐标系实际上就是发生了平移的世界坐标系。物体坐标系转换到惯性坐标系只有旋转,而惯性坐标系转换到世界坐标系只有平移。

 

5、坐标变换

      当要把一个物体坐标系(注意是物体坐标系,不是物体)转换到世界坐标系时,首先旋转物体坐标系与惯性坐标系重合,然后移动惯性坐标系与世界坐标系重合。而对于站在世界角度看物体来说(即物体自身相对于世界坐标系的运动),正好是这个过程逆过程:物体首先反向平移到原来物体所在的那个位置,惯性坐标系随物体坐标系一同移动,然后物体反向旋转至惯性坐标系的某个位置。

      上面所说的就是坐标变换-用一个坐标系来描述另外一个坐标系内的物体(或者说点)的过程。上文所说的平移和旋转都是坐标变换,坐标变换还包括缩放、切变、投影等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值