VertexBuffer,IndexBuffer等等,这些内容也同样需要在ResourceManager中加载,因为他们也是“公有”的内容。
为了更方便的使用模型,我加入了ModelResource类,保存模型中的公有数据
下面就贴上ModelResource的定义
1: class ModelResource : IDisposed
2: {
3: public:
4: ModelResource(string _filename, GraphicsDevice* device);
5: virtual void Dispose();
6:
7: ID3DXMesh* GetD3DMesh();
8: IDirect3DVertexBuffer9* GetVertexBuffer();
9: IDirect3DIndexBuffer9* GetIndexBuffer();
10: BoundingSphere* GetOriginalSphere();
11: protected:
12: void Initialize();
13: void CalculateBoundingSphere();
14:
15: string filename;
16: GraphicsDevice* pDevice;
17: ID3DXMesh* pMesh;
18: IDirect3DVertexBuffer9* pVertexBuffer;
19: IDirect3DIndexBuffer9* pIndexBuffer;
20: BoundingSphere* pOriginalSphere;
21: DWORD FVF;
22: };
我在ModelResource中保存有VertexBuffer,IndexBuffer。OriginalSphere是模型加载时候的包围球,也是属于公有的,方便做变换的时候使用。
代码具体参加ModelResource.cpp,这里就不详细的说了。
模型类中还包含有Material类(主要包含贴图),Transformation类(包含变换),这些代码都是比较好懂的,就不一一解释了。
4. 示例
本节的示例代码在Mainlogic中的Example2中可以找到
初始化一个模型,并加入贴图与Effect的代码看起来像这个样子:
1: //初始化模型
2: pModel = new Model("Content\\Tiger.x", pDevice);
3: pModel->SetDiffuseMap("Content\\Tiger.bmp");
4: pModel->SetPosition(D3DXVECTOR3(0,0,-20));
5:
6: //初始化模型的属性
7: pModel->SetEffect(new SimpleEffect(pDevice, pModel, "SimpleTexture.fx"));
8: pModel->GetEffect()->Initialize();
很简单吧。 |