3D游戏从入门到精通-18

时间:2022-05-25 19:58:15
2.10.1矩阵变换
在3D游戏里,要表达不同的东西,每样东西都在不同的位置。比如构造一个间教室,那么就需要根据黑板、讲台、座位来不同位置来放置。由于所有模型坐标都是局部坐标,都需要变换到世界坐标,才显示出正确位置。还有游戏里的很多物体是动起来的,就是位置会变化,大小会变化。比如模拟一辆小车开过马路,那么这辆车就需要水平运动起来,车轮还需要旋转起来。仔细看一下车轮,它不但作平移运动,还需要作自转运动。要表达物体在不同的位置,需要使用到矩阵。要表达物体旋转运动和平移运动,也需要使用矩阵。由n元线性方程组的系统数组成的m行n列的数表,就叫做矩阵。如下图所示:
由于在三维里的坐标变换,都是线性变换,所以可以使用矩阵来表示三维变换。本来三维坐标,只有三个坐标轴,写出来的线性方程也只有三个的。但为了方便把所有的坐标变换统一到一种矩阵表达方式,就使用了4×4的矩阵来表示变换,而不是采用3×3的矩阵变换。在D3D里表示如下:
typedef struct _D3DMATRIX {
    union {
        struct {
            float        _11, _12, _13, _14;
            float        _21, _22, _23, _24;
            float        _31, _32, _33, _34;
            float        _41, _42, _43, _44;
 
        };
        float m[4][4];
    };
} D3DMATRIX;
矩阵在3D游戏里是怎么使用的呢?下面来看看这个例子,它已经把矩阵基本特性都使用了。在自然界里,都多东西都是变化的,运动的。在我们生活的太阳系里,在很多年前就知道太阳是自转的,地球有自转也有公转,而月亮也自转,还有绕着地球公转和太阳公转。要表达太阳的自转,就需要使用矩阵来旋转它的模型。而表达地球的自转,也需要使用矩阵来旋转它的模型,并且还需要使用平移的矩阵,然后再旋转它,这样才会让地球绕着太阳转。而月亮是最复杂的,不但自己要自转,还要绕着地球公转和太阳公转,这样月亮就需要多次使用旋转矩阵和平移矩阵。
在D3D里可以使用矩阵实现物体的缩放、旋转、平移。在三维坐标里,任何的点(x,y,z)变换到(x', y', z'),都可以使用4×4的矩阵来计算出来,像下面这样计算它:
 
电子书 MM3D 引擎源程序 例子源程序 49 元一套
联系人:蔡军生  
联系方式:
QQ: 9073204
EMAIL: caimouse1976 at sina.com
 
 
  ×