这次的笔记包含两个内容:1:简单介绍网格模型 和 .x文件;2、优化Mesh模型已取得更高的渲染效率,用Direct3D去加载一个.X文件。
游戏中的场景和角色都非常复杂,想要手工去填充这些模型的每一个顶点几乎是个不可能的事情。一般是用建模工具去完成,然后导出一个程序可以识别的网格模型。最常用的是3DMax,和Maya。
1:.X模型
X格式是微软提供的一种开放的数据存储格式。.X支持自定义模版结构,可以通过它存储自己的任何一种数据,并不一定使我们的模型数据。当然现在要讨论的是.X格式在Direct3D的应用,DirectX的D3DX库提供丰富的支持函数,使得用户可以轻松的使用.X文件。并且.X文件还支持动画。DirectX Viewer 是一个.X文件的查看器,用于查看模型:
唔之艾瑞莉娅:艾欧尼亚不会灭亡。
.X文件可以用文本格式存储,可以用记事本打开一看究竟,详细参考《Direct3D 游戏看法详解 》,同样可以采用二进制格式存储,并支持自定义文件结构。
2:D3DX库中一些相关接口
a)、ID3DXMesh 派生自ID3DXBaseMesh,包含了网格(Mesh)模型的集合信息,顶点缓存和索引缓存(描述顶点以何种方式组织成三角形)。相关函数:
//获得顶点缓冲区和索引缓冲区的指针
HRESULT ID3DXMesh::GetVertexBuffer( LPDIRECT3DVERTEXBUFFER* ppVB );
HRESULT ID3DXMesh::GetIndexBuffer( LPDIRECT3DVERTEXBUFFER* ppVB );
//锁定缓冲区,一遍进行读写操作
HRESULT ID3DXMesh::LockVertexBuffer( DWORD Flags, BYTE** ppData );
HRESULT ID3DXMesh::LockIndexBuffer( DWORD Flags, BYTE** ppData );
//完成了相应操作,必须解锁
HRESULT ID3DXMesh::UnlockVertexBuffer();
HRESULT ID3DXMesh::UnlockIndexBuffer();
//更多获取几何信息的方法
DWORD GetFVF(); //返回顶点格式
DWORD GetNumVertices() //返回顶点缓存中的定点数