Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, DirectX] Czym otworzyć plik *.x

Ostatnio zmodyfikowano 2012-08-31 21:33
Autor Wiadomość
ison
Temat założony przez niniejszego użytkownika
[C++, DirectX] Czym otworzyć plik *.x
» 2012-08-31 20:55:20
Hej,
ma ktoś pomysł czy istnieje cokolwiek co otwiera microsoftowy plik .x? Ani milkshape ani blender nie wspiera tego, blender wspiera jedynie export, nie ma żadnych pluginów do importu a jeśli są to nie działają. Ponoć czymś co otwiera plik .x jest DirectX SDK, już postanowiłem pobrać te 500 MB ale oczywiście nie ma tam nic co by mogło otworzyć tego typu model.
Moim głównym celem jest skonwertowanie skompresowanego pliku .x do nieskompresowanego bo tylko takie wspiera Irrlicht. Da się jakoś to zrobić? Może ma ktoś zainstalowane coś co otwiera ten plik i by mógł go przekonwertować do nieskompresowanej wersji?
P-64186
DejaVu
» 2012-08-31 21:00:36
http://prideout.net/blog/?p=33

http://msdn.microsoft.com/en-us/library/bb174069(VS.85).aspx

Reasumując: Google is your friend :)

/edit:
Na tej pierwszej stronce co podałem jest kod źródłowy konwertera - poniższy fragment odpowiada za wczytanie pliku *.x - a potem to już możesz zrobić z nim co chcesz.
C/C++
void CreateGeometry( const char * sourceFile )
{
    cout << endl << "Reading " << sourceFile << endl;
    wstring wideSourceFile( sourceFile, sourceFile + strlen( sourceFile ) );
   
    // Load the mesh from the specified file
    LPD3DXBUFFER pD3DXMtrlBuffer;
    HRESULT hr = D3DXLoadMeshFromX(
    wideSourceFile.c_str(),
    D3DXMESH_SYSTEMMEM,
    g_pd3dDevice, 0,
    & pD3DXMtrlBuffer, 0, & g_dwNumMaterials,
    & g_pMesh );
   
    if( FAILED( hr ) )
    {
        MessageBox( 0,( L"Could not find " + wideSourceFile ).c_str(), L"X2CTM", MB_OK );
        exit( 1 );
    }
   
    D3DXMATERIAL * d3dxMaterials =( D3DXMATERIAL * ) pD3DXMtrlBuffer->GetBufferPointer();
   
    g_pMeshMaterials = new D3DMATERIAL9[ g_dwNumMaterials ];
    g_pMeshTextures = new LPDIRECT3DTEXTURE9[ g_dwNumMaterials ];
   
    for( DWORD i = 0; i < g_dwNumMaterials; i++ )
    {
        g_pMeshMaterials[ i ] = d3dxMaterials[ i ].MatD3D;
        g_pMeshMaterials[ i ].Ambient = g_pMeshMaterials[ i ].Diffuse;
        g_pMeshTextures[ i ] = 0;
        if( d3dxMaterials[ i ].pTextureFilename && lstrlenA( d3dxMaterials[ i ].pTextureFilename ) > 0 )
             D3DXCreateTextureFromFileA( g_pd3dDevice, d3dxMaterials[ i ].pTextureFilename, & g_pMeshTextures[ i ] );
       
    }
   
    pD3DXMtrlBuffer->Release();
   
    // Convert the filename from .X to .CTM while preserving the full path.
   
    char destFile[ _MAX_PATH ];
    char drive[ _MAX_DRIVE ];
    char dir[ _MAX_DIR ];
    char fname[ _MAX_FNAME ];
    char ext[ _MAX_EXT ];
   
    _splitpath_s( sourceFile, drive, _MAX_DRIVE, dir, _MAX_DIR, fname, _MAX_FNAME, ext, _MAX_EXT );
    _makepath_s( destFile, _MAX_PATH, drive, dir, fname, "ctm" );
   
    ExportCTM( g_pMesh, destFile );
   
    cout << "Exported " << destFile << endl;
}
P-64187
ison
Temat założony przez niniejszego użytkownika
» 2012-08-31 21:14:54
Z google spędziłem już jakieś 6 godzin szukając tego samego.
Ten plik prowadzi do jakiegoś X to OpenCTM Converter, nie wiem w ogóle co to za format. Nie ma jakiegoś programu w stylu blender, który wspiera otwieranie plików .x? Chodzi mi tylko o konwersję skompresowany .x -> nieskompresowany .x
Samo wczytywanie plików .x z poziomu dx nic mi nie da, nie kodzę w nim.
P-64190
DejaVu
» 2012-08-31 21:16:59
No jak to nic nie da? Wczytujesz w formacie X i możesz zapisać w dowolnym innym :) Być może nawet jest funkcja/metoda DX, która umożliwi Ci zapisanie pliku bez kompresji.

/edit:
http://www.toymaker.info/Games/html/x_file_saving.html

No i są flagi:
C/C++
xFile->CreateSaveObject( "test.x", D3DXF_FILESAVE_TOFILE, D3DXF_FILEFORMAT_BINARY | DXFILEFORMAT_COMPRESSED, & xFileSave );

/edit2:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb173958(v=vs.85).aspx
P-64191
SeaMonster131
» 2012-08-31 21:27:30
Albo skorzystaj z jakiegoś konwertera: http://web.t-online.hu/karpo/. Skonwertuj na np 3ds, i w Blenderze eksport na *.x. Choć to dość długa droga ;p
P-64192
ison
Temat założony przez niniejszego użytkownika
» 2012-08-31 21:33:25
@DejaVu no być może, ale może jednak już lepiej nie będę się zagłębiał w kodzenie w DX ;) Zanim uporam się z instalacją tych wszystkich bibliotek, linkowaniem i miliardem innym problemów to już chyba lepiej jak będzie gdzieś jakiś działający importer do blendera. No nie wiem, nie znam dx.

@SeaMonster131 długa droga jak najbardziej nie jest ;) tylko, że ten konwerter, do którego dałeś link nie wspiera binarek .x, tylko zwykłe.

//edit
Dobra, udało mi się znaleźć dobry konwerter :)
W nowszych wersjach DirectX SDK nie wiadomo czemu usunęli mview.exe do przeglądania plików .x więc trzeba pobrać SDK z 2004 roku.
Można tam bez problemu wczytać i zapisać .x w dowolnej postaci.
P-64193
« 1 »
  Strona 1 z 1