D3D中的坐标系

D3D中的坐标系  

 

D3D中有几个坐标系, 模型坐标系, 世界坐标系, 观察坐标系, 投影坐标系. 这里先简述一下模型坐标系和世界坐标系的概念和关系.

 

模型坐标系又称本地坐标系. 是为了方便建立模型, 不用去考虑所要建的模型在世界坐标系中的位置及方向. 建模型时, 只用考虑模型中各个顶点对应本地坐标系的位置就可以. 我们3DMax输出的模型文件.其中的对应的坐标系就是模型坐标系.

 

世界坐标系,是在为了标识每个模型在空间的相对位置, 而建立的坐标系.

 

当我们把模型加载到世界空间中(对应的坐标系就是世界坐标系), 本地坐标系和世界坐标系又是什么样的关系呢? 这个很重要,因为直接关系到我们的模型将会显示在什么位置. 答案是默认情况下是2个坐标系是重合的. 如分别建立一个球体和圆柱体在各自的模型空间中, 并且中心都和各自的坐标原点重合. 不采用任何坐标系变换将这2个模型加载进来, 那么这2个模型在世界坐标系中重合的. 那么怎么使这2个模型处于不同的位置,比如让其中一个模型处在x轴的负半轴而另外一个在正半轴, 那么我们可以设置世界矩阵来完成.

 

SetTransform( D3DTS_WORLD, &matWorld );matWorld是将模型设置到世界矩阵的某个位置.

 

这里其实是将模型的模型坐标系移到世界坐标系的某个位置.

 

在D3D的场景中只有一个世界坐标系, 而模型坐标系数目不定, 有几个模型就有几个模型坐标系.

 

起初我学习者部分的时候有些迷糊, 看到上面这个函数以为每个模型就有一个世界坐标系, 因为我认为为某个模型设置世界矩阵不就是在设置世界坐标系,当时这个问题想了几天, 也没有想明白. 隔了些许时日, 重新看这个问题, 就明白了.

 

这样的话, 为了让每个模型让它处在世界坐标系的不同位置, 就为每个模型设置世界矩阵, 给自己再提个醒, 设置世界矩阵是这只模型在世界坐标系中位置, 而不是为某个模型设置新的世界坐标系. 很多书包括sdk的文档中给出的例子都是直接在代码中设置模型,如三角形的各个顶点的世界坐标系坐标, 为了让这个某型动起来, 在设置世界矩阵, 这样很容易误导读者. 我不知道别人有没有理解这块时, 有没有遇到象我这样的问题. 但当时学这块的时候我是着实迷糊了.

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *