DirectX mehrere Meshes laden



  • Hi!

    Ich Lade jetzt meshes von xfiles nach dem Schema:

    LPD3DXBUFFER pMtrlBuffer = NULL;
          DWORD numMaterials;
          LPD3DXMESH mesh;
    
          D3DXLoadMeshFromX( "square.x", D3DXMESH_SYSTEMMEM, g_pD3DDevice,
                                        NULL, &pMtrlBuffer, &numMaterials, &mesh);
    
        D3DMATERIAL8* pMeshMaterials = new D3DMATERIAL8[numMaterials];
        LPDIRECT3DTEXTURE8* pMeshTextures  = new LPDIRECT3DTEXTURE8[numMaterials];
        D3DXMATERIAL* matMaterials = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();
    
        for(DWORD i = 0; i < numMaterials; i++)
        {
            pMeshMaterials[i] = matMaterials[i].MatD3D;
            pMeshMaterials[i].Ambient = pMeshMaterials[i].Diffuse;
    
            if(FAILED(D3DXCreateTextureFromFile(g_pD3DDevice, 
                                                matMaterials[i].pTextureFilename, 
                                                &pMeshTextures[i])))
                {
                pMeshTextures[i] = NULL;
            };
    
        }
    

    Wie schaffe ich es jetzt Mehrere Datein zu laden, und die einzelnd vor dem Ausgeben zu Transformieren?


  • Mod

    was genau ist das problem? du hast doch sicher nicht 0 ahnung wenn du sowas machen willst, sonst wuerdest du vermutlich einfuehrungsliteratur lesen. Es waere also von vorteil wenn du konkret sagst was du versuchst und wo das problem ist.

    so klingt das eher nach "wer schreibt mir das", und das ist ja sicherlich nicht wofuer wir hier sind 🕶



  • ja, da hast du nicht ganz unrecht...

    ich hab mir bisher 3 directx tutorials bearbeitet und hab noch lücken im verständniss. unter anderem an welcher stelle ich DirectX mehes lade, und wie ich sie an die render_frame(); funktion übergebe.

    wenn ich literatur finden würde die genau das behandeln würde wäre mir sehr geholfen. das problem ist nur das alle Tutorials irgendwie ein eigenes Shema haben und ich meinen Code andauernt umschreiben müsste damit das im entferntesten kompatibel wird.

    Ich bin soweit das ich meshes lade und render. ich würde nun gerne mehrere verschiedene meshes laden und auch alle individuell transformieren können.


  • Mod

    cl90 schrieb:

    ja, da hast du nicht ganz unrecht...

    ich hab mir bisher 3 directx tutorials bearbeitet und hab noch lücken im verständniss. unter anderem an welcher stelle ich DirectX mehes lade, und wie ich sie an die render_frame(); funktion übergebe.

    das klingt irgendwie nach basis c++ wissen. es hat nicht viel mit directX zu tun, es waere genau das gleiche wenn du opengl oder mit deinem software renderer arbeiten wuerdest.

    Du hast ja schon den code der ein mesh laedt, wieso fuegst du nicht den code ein der dir mehrere meshes laedt, das ist an sich trivial.

    wenn ich literatur finden würde die genau das behandeln würde wäre mir sehr geholfen. das problem ist nur das alle Tutorials irgendwie ein eigenes Shema haben und ich meinen Code andauernt umschreiben müsste damit das im entferntesten kompatibel wird.

    ich habe das gefuehl dass du die sache falsch angehst. tutorials sind nicht dazu da sie abzuschreiben oder deinen code nach deren referenz zu aendern.
    tutorials sollten dir wissen vermitteln, damit du es nach deiner eigenen art anwenden kannst, nach dem motto "zeige jemandem wie man fisch, und er wird kein hunger leiden", weisst du wie man ein mesch laedt, weisst du wie man 2, 3 und n meshes laedt.

    Ich bin soweit das ich meshes lade und render. ich würde nun gerne mehrere verschiedene meshes laden und auch alle individuell transformieren können.

    also machst du n mal das, was du schon einmal machen kannst. simple anwendung von schleifen, versuch es wenigstens und wenn es aus irgendeinem grund nicht geht, poste die konkrete frage bzw das problem (nachdem du versucht hast es selbst zu loesen 😉 ).
    und wir koennen dir helfen oder dich auf die noetigen informationen verweisen.

    falls dein ziel garnicht ist es zu lernen wie man mit graphik APIs umgeht, schnapp dir eine fertige engine nach dem motto: http://scientificninja.com/blog/write-games-not-engines



  • ok dann habe ich einen falschen eindruck hinterlassen.
    ich programmiere c seit etwa zwei jahren, c++ (erst) seit ein paar monaten.
    habe spiele mit SDL und SFML programmiert. ich weiß schon wie es lösen könnte. die frage die ich mir vor jeder improvisierten lösung stelle ist einfach:
    Wie würde man das jetzt optimal lösen?

    Ich könnte auch mit SFML eine 3D engine schreiben, aber das ist quatsch, wenn es auch viel Professioneller geht. man kann alles irgendwie Improvisieren.
    aber man baut ja auch kein fahrad zu einem Motorrad um. man kauft sich ein Motorrad.

    Daher lese ich mich ja in DirectX ein. um auf einer Basis zu arbeiten, die ich nicht wieder in 3 wochen liegen lasse weil es eine lösung gibt die viel schneller ist.

    ist aber ok. ich dachte nur es gäbe einen eleganteren weg als einfach ein Mesharray zu erstellen. dann werde ich die meshes einfach in einer funktion vorladen und pointer an die render funktion übergeben.


  • Mod

    "premature optimization is the root of all evil".
    mesh laden wird 99.9% der zeit vermutlich in der directX funktion verbringen, mach dir also keine sorgen um die performance von deinem array, du muesstest es schon mit absicht langsam machen wollen damit es irgendwelchen effekt hat den man optimieren koennte.



  • ja das stimmt.
    hat mich zum nachdenken angeregt. hab das jetzt alles auf eigene art gelöst.
    funzt super. ich hab nur son tick das ich immer alles optimal machen will. das bremst aber meistens aus.

    danke für den anreitz!


Anmelden zum Antworten