Mitähän eroa mahtaa olla esim. dx7:llä ja dx8:lla? Lähinnä noin niinkuin ohjelmoinnin kannalta.
Voinko kääntää dx7:lle tehdyn ohjelman vaikkapa dx9:llä (se kai se uusin on)?
Niitä uusia ominaisuuksia voisi varmaan opetella vähän kerrallaan.
Periaattessa ei koska DX 7 on viimeisin versio jossa on mukana DirectDraw rajapinta jotka käytetään 2D grafiikkaan. uudemmissa versioissa on käytössä DX3D. Tämä ei tietenkään etsä porttaamista. DX kasilla voit ainakin yrittää seuraavaa. En mene takaamaan mitään, koska en päässy kokeilemaan koodia mutta näin periaatteessa menee.
ID3DXSprite *pSprite = NULL; RECT SrcRECT; IDirect3DTexture8 *pTexture; D3DXIMAGE_INFO SrcInfo; SrcRECT.left=0; SrcRECT.top=0; ScrRECT.right=64; // kuva on 64x64 px iso ScrRECT.bottom=64; D3DXCreateTextureFromFileEx(g_pD3DDevice, "C:\moikka.tga" , 0, 0, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT, 0xFFFFFFFF, &SrcInfo , NULL, &pTexture); if(FAILED(D3DXCreateSprite(g_pD3DDevice, &pSprite))) { // Alustuksessa moka } pSprite->Draw(pTexture, &ScrRECT, &D3DXVECTOR2(1.0, 1.0), NULL, 0.0f, &D3DXVECTOR2(x,y), 0xFFFFFFFF);
Kuulostaapa tosi järkevältä tavalta tehdä yks iso polygoni jonka teksturoi. örr.
Suomipelit.comissa sanottiin muistaakseni että eiskassa piti vielä tehdä alussa niin paljon koodia että siinä tuli helposti useammankin aloittelian ensimmäisen peliprojektin verran koodia. Kun taas siitä eteenpäin Microsoft on lisännyt niihin apukirjastoja.
Kieltämättä tuo Kaviaarin esimerkki näytti niin paljon yksinkertaisemmalta kuin se DirectDraw-koodi, että ilmeisesti se uusien asioiden opettelu kannattaa.
(Voi kun jo saisin sen laajakaistan, että pääsisin latailemaan uudempaa SDK:ta...)
Mistäs noita DirectX:iä voi latailla? Kiinnostaisi hieman kun alan taas saada järjestettyä itselleni aikaa ohjelmointiin...
Ihan kuin joskus ois ollu kiireitäkin xD
Kaikki, mitä ikinä olet halunnut tietää Windows-ohjelmoinnista (ja vielä paljon enemmän): http://msdn.microsoft.com/library/ (IE-only -_-)
Nojoo tuo mun esimerkki näyttää vaan D3DXSpriten luomisen, tosta puuttuu pre instaloitu g_pD3DDevice. Se alustetaan jokseenkin tähän tapaan.
IDirect3D8 g_D3D; // D3D D3DDDSPLAYMODE d3ddm; // Näyttötila(ikkunoitu/kokonäyttö) IDirect3DDevice8 *f_pD3DDevice; if((g_D3D = Direcet3DCreate8(D3D_SDK_VERSION)) == NULL) // kokeillaan alustaa D3D { // Virhe! } ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETRES)); // Tyhjennetään strukti näytön asetuksia varten d3dpp.Windowed = FALSE; // Tässä luodaan kokonäyttö tilaan sovellus d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP; d3dpp.FullScreen_RegreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.FullScreen_Presentation_Interval = D3DPRESENT_INTERVAL _ DEFAULT; d3dpp.BackBufferFormat = d3ddm.Format; if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice))) // Luodaan häkkyrä joka pitää kasassa piirtämistä D3D:llä { // Virhe } // Tähän tulee sun omaa koodia hurjat kasat g_pD3DDevice->Reset(&d3dpp); // tuhoaminen
Jos haluat kysyä jotain tarkemmin tai enemmän asioita ota yhteyttä joko maililla kaviaari@mbnet.fi tai ircnetissä kanavalla #sorsalampi.
ja vielä lopuksi miten noita arvoja pitää muokata että saadaan aikaan ikkunoitu sovellus.
d3dpp.Windows=TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format;
No, yhä edelleenkin se on yksinkertaisempi. Erityisesti tuo ikkunoitu sovellus. Se ei nimittäin minulta dx7:lla onnistunut.
Aihe on jo aika vanha, joten et voi enää vastata siihen.