矩阵与坐标系的转换
接下来,我们准备为大家介绍(矩阵与坐标系的转换)。
首先,我们会提出一个问题,为什么要进行坐标系转换,不是只有一个坐标系吗?
其实,在游戏开发中,是有多个不同的坐标系,而这些坐标系是需要经过转换以后,我们才可以在屏幕上看到3维模型的。
所以,在接下来的时间里面,我们首先来看看物体坐标系。
首先,我们提出一个问题,你的头部在你身体的哪个位置?
然后,我们的回答是在我们的颈部上面,而我们不会说在手上面,也不会说在腿上面,为什么呢?因为,这是由我们人体的结构所确定的,而这个人体的结构就形成了我们自身的一个坐标系,我们称它为物体坐标系。
然后,根据这个物体坐标系,我们再问你,大腿在你身体的哪个位置,然后,我们会说大腿在身体的下方,然后,我们再问你,小腿在你身体的哪个位置,然后,我们会说,小腿在大腿的下面,所以,通过这个
坐标系我们就可以正确地定位出身体各部分的位置。
所以,这样的一种坐标系同样会出现在我们的3维模型中,大家可以看看上图中的一个机器人模型,通过这个坐标系,我们就可以准确地定位出模型中的每个部位,例如右手在X坐标是5,Y坐标是10的位置上面,而头部在X坐标是0,Y坐标是15的位置上面,所以,对于每一个三维模型来说,它们都有一个属于自己的坐标系,而这个坐标系就称为模型坐标系,而模型坐标系与物体坐标系是一样的,另外,它们也可以称为局部坐标系,因为,它们都是用于描述局部上面的坐标位置,包括上面例子中描述我们自身各个部位的位置,都是局部的。
当我们了解了什么是模型坐标系以后,我们再来看看世界坐标系,首先,我们使用现实生活中的例子,假设,007到了北极后遇上了问题需要帮忙,那么,他如何才可以准确地把自己当前的位置告诉救援人员呢?
而在我们的现实生活中,就存在着一个经纬度的坐标系,所以,他只要把自己当前的经度是多少,纬度是多少告诉救援人员,那么,求援人员就可以立即确定他的位置,并对他进行救援帮助了。所以,这个经纬度的坐标系,对于我们现实生活来说,就是我们的世界坐标系。
那么,对于游戏世界来说,它也有一个世界坐标系,如下图:
从上图来看,世界坐标系与模型坐标系是相同的,大家的坐标原点都是X坐标为0,Y坐标为0,而Z坐标目前我们统一为0,然后,原点往左是负,往右是正,往上是正,往下是负,那么,我们会提出一个问题既然是一样的,为什么还要转换呢?
那么,这个原因就是,游戏世界的坐标系是用于定位整个游戏世界中所有模型的位置,就像我们现实生活中的经纬度可以定位我们在整个地球上的准确位置,而模型坐标系是用于定位模型自身各个部件的准确位置。所以,它们的用途是不一样的,那么,在模型需要定位到世界坐标系时就要进行坐标系的转换了。
那么,当模型坐标系转换到世界坐标系时,它是如何转换的呢?
通过上图,我们假设需要把模型定位到世界坐标系中的X坐标为-4,Y坐标为8的位置中,而转换的方式就通过一个4X4的平移动矩阵将模型坐标系中所有顶点的X与Y坐标加上世界坐标系中的X为-4,Y为8的这个坐标,这样,模型坐标系就可以被转换到世界坐标系了,同时,将模型定位在X为-4,Y为8的位置
。
我们可以看一看,模型站立的位置在模型坐标系中是原点(0,0)而转换后是(-4,8)就是把模型的X坐标0+-4=-4,而Y坐标8+0=8。
然后,再看看模型的头部,原来在模型坐标系的位置是(0,15),而转换后就是(-4,23)就是把模型的X坐标0+-4=-4,而Y坐标8+15=23,而整个模型中所有顶点的坐标都是这样转换就可以了,而实际转换中我们会设定一个4X4的平移动矩阵,然后,通过矩阵对顶点进行转换。
现在,相信大家已经可以了解到什么是坐标系之间的转换了,而在游戏的开发中,我们除了要把模型坐标系转换到世界坐标系以外,我们还要再把它转换到摄像机的坐标系,然后,再通过投影坐标系的转换以后我们才可以在屏幕上看到游戏中的3维模型。
而剩下来的这一系列的坐标系转换内容,我们将会结合代码来为大家作介绍。
当我们了解完以上的内容以后,就需要大家把手动起来,看看如何通过代码把这些内容最终实现出来。所以,我们先点击下面的按钮,然后,进入到游戏中,再结合代码作进一步的学习与实践训练。
(通过游戏模式学习与训练,需要在电脑上运行)
本章学习后的代码运行效果如下:(可在手机上查看)