//-------------------------------------------------------------------------------------- // Saves the mesh to X-file //-------------------------------------------------------------------------------------- void SaveMeshToXFile() { HRESULT hr; // Fill out D3DXMATERIAL structures UINT numMaterials = g_MeshLoader.GetNumMaterials(); D3DXMATERIAL* pMaterials = new D3DXMATERIAL[numMaterials]; char* pStrTexture = new char[MAX_PATH * numMaterials]; if( ( pMaterials != NULL ) && ( pStrTexture != NULL ) ) { for( UINT i = 0; i < g_MeshLoader.GetNumMaterials(); i++ ) { Material* pMat = g_MeshLoader.GetMaterial( i ); if( pMat != NULL ) { pMaterials[i].MatD3D.Ambient.r = pMat->vAmbient.x; pMaterials[i].MatD3D.Ambient.g = pMat->vAmbient.y; pMaterials[i].MatD3D.Ambient.b = pMat->vAmbient.z; pMaterials[i].MatD3D.Ambient.a = pMat->fAlpha; pMaterials[i].MatD3D.Diffuse.r = pMat->vDiffuse.x; pMaterials[i].MatD3D.Diffuse.g = pMat->vDiffuse.y; pMaterials[i].MatD3D.Diffuse.b = pMat->vDiffuse.z; pMaterials[i].MatD3D.Diffuse.a = pMat->fAlpha; pMaterials[i].MatD3D.Specular.r = pMat->vSpecular.x; pMaterials[i].MatD3D.Specular.g = pMat->vSpecular.y; pMaterials[i].MatD3D.Specular.b = pMat->vSpecular.z; pMaterials[i].MatD3D.Specular.a = pMat->fAlpha; pMaterials[i].MatD3D.Emissive.r = 0; pMaterials[i].MatD3D.Emissive.g = 0; pMaterials[i].MatD3D.Emissive.b = 0; pMaterials[i].MatD3D.Emissive.a = 0; pMaterials[i].MatD3D.Power = ( float )pMat->nShininess; WideCharToMultiByte( CP_ACP, 0, pMat->strTexture, -1, ( pStrTexture + i * MAX_PATH ), MAX_PATH, NULL, NULL ); pMaterials[i].pTextureFilename = ( pStrTexture + i * MAX_PATH ); } } // Write to file in same directory where the .obj file was found WCHAR strBuf[ MAX_PATH ]; swprintf_s( strBuf, MAX_PATH - 1, L"%s\\%s", g_MeshLoader.GetMediaDirectory(), L"MeshFromOBJ.x" ); hr = D3DXSaveMeshToX( strBuf, g_MeshLoader.GetMesh(), NULL, pMaterials, NULL, numMaterials, D3DXF_FILEFORMAT_TEXT ); if( SUCCEEDED( hr ) ) { swprintf_s( g_strFileSaveMessage, MAX_PATH - 1, L"Created %s", strBuf ); } else { DXTRACE_ERR( L"SaveMeshToXFile()::D3DXSaveMeshToX", hr ); swprintf_s( g_strFileSaveMessage, MAX_PATH - 1, L"Error creating %s, check debug output", strBuf ); } } SAFE_DELETE_ARRAY( pMaterials ); SAFE_DELETE_ARRAY( pStrTexture ); }