其中类ID3DObjectFactory,是负责产生D3D对象的工厂类,是一个接口,D3DDotXFactory实现了它。其中用到了设计模式中的工厂方法模式。至于说什么才能叫作工厂方法模式呢??它的定义是这样的:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到了子类。
它的UML图如下:
Product就是一个工厂的接口,定义了一种产生对象的抽象方法。
ConcreteProduct就是具体实例化一个工厂ConcreteCreator的。
ConcreteCreator就是具体一个工厂,这个工厂可能实现了抽象类Creator中定义的方法。
现在,我把D3DUtility包中的实际代码拿出来具体说明一下:
首先现定义一个抽象基类DirectX3DObject(相当于上面的Creator):
.
工具包D3DUtility-------DirectX3DDotXObject类介绍
该类实现了对3DSMAX模型文件(.x)的驱动及其控制,从DirectX3DObject(DirectX3D的基类派生,而且实现IControlDirectX3DObject中的方法。DirectX3DObject类的结构如下:
extern BYTE m_bKey[256];//键盘事件响应的按键数组
. 其中对于键盘事件的响应被封装在void SetWorldMatrix(void);中了,原因很简单对于一个模型文件
进行一些控制,比如平移,旋转等等操作就是对世界坐标矩阵的操作。下面简单介绍一下:
平移。物体上每个点进行水平和垂直的移动,Dx 和Dy 参数分别给出移动的尺寸。
具体算法x' = x + Dx ,y' = y + Dy 。其中 x',y' 是新的坐标, x,y 是源坐标。
Dx是水平移动距离,Dy是垂直移动距离。平移矩阵是:
|1 0 0| |x' y' 1| = |x y 1| * |0 1 0| |Dx Dy 1|
旋转。组成物体的每个点都相对于坐标原点旋转一个角度。
算法公式是:x' = (x * cos A) - (y * sin A) ,y' = (x * sin A) + (y * cos A)。
A表示绕原点逆时针旋转的角度,用矩阵表示如下:
| cos A sin A 0| |x' y' 1| = |x y 1| * |-sin A cos A 0| | 0 0 1|
为了简单起见,故把对3DSMAX模型文件(.x)的键盘事件响应写在了
void SetWorldMatrix(void); 中。
3.5 工具包D3DUtility-------DirectX3DAnimationDriver类介绍
功能是用来具体驱动骨骼模型,这个类会用到了D3DUutility工具包 中的MultiAnimationFrame和MultiAnimationMeshContainter。其中MultiAnimationFrame、MultiAnimationMeshContainter用来驱动骨骼模型的类。MultiAnimationMeshContainter.
.
Frame Bip01_R_Foot {//--孙子骨骼 FrameTransformMatrix { 0.988831,0.124156,0.082452,0.000000,-0.122246,0.992109,-0.027835,
.
AnimationKey { 4; //动画类型 :4表示变换矩阵键。用1
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/8/8
基于XML脚本驱动的DirectX游戏引擎(四)由毕业论文网(www.huoyuandh.com)会员上传。