D3D9 Sample(6)—Meshes
打开Tutorial 6: Meshes项目,编译后运行,界面如下:
这个例子主要演示网格模型(Mesh),一个三角形可以手写,但是模型通常都很庞大,有几百、几千甚至几万个点,就需要更简便、有效的管理方式。这个例子主要展示x文件的使用。
1. 初始化
初始化主要是加载X文件和纹理文件。在InitGeometry函数中完成。
1.1 用D3DX函数加载网格
D3DXLoadMeshFromX
加载Tiger.x文件。加载的同时,我们返回了材质数g_dwNumMaterials和材质指针。
1.2 枚举材质,加载纹理
根据上面得到的材质数和材质指针,我们可以遍历.x文件中定义的各种材质。每种材质除了上个sample: Lights所说的各种颜色外,还会定义一张贴图。
D3DXCreateTextureFromFileA
通过这个D3DX函数加载材质中所描述的材质。
2. 渲染
每一种相同材质的点组成了子集subset,绘制网格时需要分别绘制Mesh中所有的子集,每种材质代表一个子集。
// Set the material and texture for this subset
g_pd3dDevice->SetMaterial( &g_pMeshMaterials[i] );
g_pd3dDevice->SetTexture( 0, g_pMeshTextures[i] );
// Draw the mesh subset
g_pMesh->DrawSubset( i );