Mesh laden - Will nicht



  • Es gibt glaub von MS nochn Tool für dx das diverse Formate nach x konvertieren kann evtl bringt dich das weiter. Ansonsten kannste nur auf die Bequemlichkeit verzichten und evtl selebr nen Loader für n anderes Format schreiben oder einen vorhandenen benutzen, das schließt dann aber eigene Renderfunktionen usw mit ein, ist aber nicht so schwer.



  • zum Beispiel conv3ds.exe

    Diese Wandelt 3DS-Dateien in .x-Dateinen um, funktioniert ganz gut.

    LG fluid



  • ich weiss auch nicht, egal mit wechen tool, da geht nix.
    Das Mesh Tool vom DX SDK läd die dateien aber auch, nur ohne texturen. 😕



  • kuck mal in das Tutorial, du musst erst noch die Texturen dazuladen und die Matrialien setzen,dann geht das schon

    wie im Tutorial:

    http://www.directxtutorial.com/Tutorial9/C-Direct3DMeshes/dx9C2.aspx

    viel Spaß

    p.s.: bei mir hats das funktioniert



  • ich hab rausgefunden das es nur probleme gibt wenn ich texturen dazu lade, ohne gehts ganz gut, sieht halt scheisse aus 😉



  • kuck, doch mal ob du das vertexformat richtig setzt und die Texturen kannste ja auch noch mit trillinearem Filtering verbessern, das ist schon ganz annehmbar.

    LG fluid



  • welches format sollte das sein?
    Hab schon einige durch 😕



  • zum Laden des Meshes folgenden Code verwenden:

    LPD3DXBUFFER bufMaterial;

    D3DXLoadMeshFromX(pchFileName,D3DXMESH_MANAGED,pDevice9,NULL,&bufMaterial,NULL,&mdwNumMatrerials,&mMesh);

    D3DXMATERIAL* ptempMaterials = (D3DXMATERIAL*)bufMaterial->GetBufferPointer();

    mpMaterialArray = new D3DMATERIAL9[mdwNumMatrerials];

    mpTextureArray = new LPDIRECT3DTEXTURE9[mdwNumMatrerials];

    for(DWORD i = 0; i < mdwNumMatrerials; i++)
    {

    mpMaterialArray[i] = ptempMaterials[i].MatD3D;
    mpMaterialArray[i].Ambient = mpMaterialArray[i].Diffuse;

    if(FAILED(D3DXCreateTextureFromFile(pDevice9,(LPCSTR)(ptempMaterials[i].pTextureFilename),&mpTextureArray[i])))
    {
    mpTextureArray[i] = NULL; // if there is no texture, set the texture to NULL
    }

    }

    // zum Rendern

    pDevice9->SetRenderState(D3DRS_LIGHTING,FALSE);

    for (DWORD i= 0; i< mdwNumMatrerials;i++)
    {
    pDevice9->SetMaterial(&mpMaterialArray[i]);
    if(mpTextureArray[i] != NULL)
    {

    pDevice9->SetTexture(0,mpTextureArray[i]);
    }
    else
    {
    pDevice9->SetTexture(0,NULL);
    }

    g_pD3DDevice9->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);

    mMesh->DrawSubset(i);

    }

    pDevice9->SetTexture(0,NULL);
    pDevice9->SetRenderState(D3DRS_LIGHTING,FALSE);
    }
    }

    // ein vertex besteht aus

    struct S_VERTEX_MESH
    {
    D3DVEKTOR vPos;
    D3DVEKTOR vNorm;
    D2DVEKTOR vTex;

    };

    also müsste man das VertexFormat setzen:

    device9->SetFvF(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)

    lg Fluid



  • Danke, aber ich verwende Managed DirectX und C#.

    Die ähnlichkeit ist aber verblüffend.



  • Na dann hoff ich trozdem mal, dass ich dir helfen konnte.

    LG fluid



  • ich will sowieso das ganze in c++ umsetzen. Die Schreibweise ist zwar etwas anderst(komplizierter) und die Umgebung unterstützt einen mehr in c# aber allein von der geschwindigkeit und der Plattform unabhängigkeit her sollte man c++ verwenden.


Anmelden zum Antworten