Ĺadny brzuch
Czy idzie korzystac jednoczesnie z tekstur i index buffora? bo jak robie teraz 'engine' to nic sie niepojawia, mimo iz wszystko zrobilem chyba tak jak powinienem.
Widać, że nie zrobiłeś tak jak powinieneś :) Chyba we wszystkich nowszych grach id i textury są używane jednocześnie.Daj kod to może się coś poradzi.
Troche tego duzo:
//definicje struct WIERZCHOLEK { FLOAT x, y, z; //pozycja wierzchołka FLOAT tx,ty; // współrzędne mapowania tekstury }; #define D3DFVF_WIERZCHOLEK (D3DFVF_XYZ|D3DFVF_TEX1) LPDIRECT3DTEXTURE9* lpTexs = NULL; int ilosc_tekstur; //render lpD3DDev->SetTexture( 0, lpTexs[0] ); lpD3DDev->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); lpD3DDev->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); lpD3DDev->SetIndices(g_IB); lpD3DDev->SetStreamSource(0,g_pVB,0,sizeof(WIERZCHOLEK)); lpD3DDev->SetFVF( D3DFVF_WIERZCHOLEK ); lpD3DDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,ilosc_wierzcholkow,0,ilosc_face); //wczytanie wierzcholkow ilosc_tekstur=iWczytajLinie(plik); lpTexs = new LPDIRECT3DTEXTURE9[1]; /*for(int i=0;i<ilosc_tekstur;i++) { WczytajLinie(plik); WczytajTeksture(lpD3DDev, "data\\jupiter2.jpg", 600, 600, NULL, &lpTexs[i]); } //funkcja WczytajTeksture() void WczytajTeksture(LPDIRECT3DDEVICE9 pDevice, char *NazwaPliku, int Szerokosc, int Wysokosc, DWORD KeyColor, LPDIRECT3DTEXTURE9 *ppTexture) { D3DXCreateTextureFromFileEx(pDevice, // Uchwyt urządzenienia renderującego NazwaPliku, // Ścierzka do tekstury Szerokosc, // Szerokość tekstury, D3DX_DEFAULT aby Direct sam ja se dobrał Wysokosc, // Wysokość tekstury, D3DX_DEFAULT aby Direct sam ja se dobrał 0, // Mipmapowanie D3DPOOL_DEFAULT, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, KeyColor, // Kolor kluczowy NULL, NULL, ppTexture); // Wskaźnik do obiektu tekstury lpD3DDev->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); lpD3DDev->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); return; }
Tekstury trzymam w tablicy dynamicznej
PS. Wiem ze zmienna LPDIRECT3DTEXTURE9 moze zawierac 8 tekstur, ale to jest wersja 0.00001.
tak poza pytaniem w temacie:
ilosc_tekstur=iWczytajLinie(plik);
lpTexs = new LPDIRECT3DTEXTURE9[1]; //tu zamiast jeden powinno być ilosc_tekstur
/*for(int i=0;i<ilosc_tekstur;i++) {
WczytajLinie(plik);
WczytajTeksture(lpD3DDev, "data\\jupiter2.jpg", 600, 600, NULL, &lpTexs[i]); //tu by się chyba wykrzaczyło gdyby ilosc_tekstur równała się 2
}
LPDIRECT3DTEXTURE9 to obiekt reprezentujący jedną teksturę, a 8 tekstur moze być renderowanych w jednym wywołaniu funkcji D(I)P.
A na jakim modelu renderujesz tą teksturę (pewnie kula z teksturą jowisza), jesteś pewny że tekstura się wczytala z dysku, i co to znaczy że się nic nie wyświetla, czy jest czarny ekran, czy taki jakim czyściłeś ekran??
dużo pytań, ale odpowiedz to łatwiej bedzie pomóc...
Użytkownik Futhark edytował ten post 05 marzec 2005, 21:14
juz problem rozwiazalem, meczylem sie caly dzien az wreszcie wpadlem ze blad jest w innym miejscu. blad znajdowal sie w funkcji initBW(), polegal na zlych ustawieniach parametrow SetTextureStageState() a wynikal stad ze niemialem szablonu aplikacji i urzylem tego na ktorym uczylem sie mieszania barw z teksturami. co do
ilosc_tekstur=iWczytajLinie(plik); lpTexs = new LPDIRECT3DTEXTURE9[1]; //tu zamiast jeden powinno być ilosc_tekstur /*for(int i=0;i<ilosc_tekstur;i++) { WczytajLinie(plik); WczytajTeksture(lpD3DDev, "data\\jupiter2.jpg", 600, 600, NULL, &lpTexs[i]); //tu by się chyba wykrzaczyło gdyby ilosc_tekstur równała się 2 }
tyle bledow w tym fragmecie kodu nie bylo, tylko ze przedtym jak zrozpaczony kopiowalem kod na forum eksperymentowalem z roznymi ustawieniami.
Tak na marginesie, na ilu forach założyłeś ten topic :P ?
Ekspert,warsztat,dimme...cośtam3 i jakie jeszcze ?
Użytkownik Zombiak edytował ten post 06 marzec 2005, 05:38
Tak na marginesie, na ilu forach założyłeś ten topic :P ?
Ekspert,warsztat,dimme...cośtam3 i jakie jeszcze ?
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Widać, że nie zrobiłeś tak jak powinieneś :) Chyba we wszystkich nowszych grach id i textury są używane jednocześnie.Daj kod to może się coś poradzi.
Troche tego duzo:
//definicje struct WIERZCHOLEK { FLOAT x, y, z; //pozycja wierzchołka FLOAT tx,ty; // współrzędne mapowania tekstury }; #define D3DFVF_WIERZCHOLEK (D3DFVF_XYZ|D3DFVF_TEX1) LPDIRECT3DTEXTURE9* lpTexs = NULL; int ilosc_tekstur; //render lpD3DDev->SetTexture( 0, lpTexs[0] ); lpD3DDev->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); lpD3DDev->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); lpD3DDev->SetIndices(g_IB); lpD3DDev->SetStreamSource(0,g_pVB,0,sizeof(WIERZCHOLEK)); lpD3DDev->SetFVF( D3DFVF_WIERZCHOLEK ); lpD3DDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,ilosc_wierzcholkow,0,ilosc_face); //wczytanie wierzcholkow ilosc_tekstur=iWczytajLinie(plik); lpTexs = new LPDIRECT3DTEXTURE9[1]; /*for(int i=0;i<ilosc_tekstur;i++) { WczytajLinie(plik); WczytajTeksture(lpD3DDev, "data\\jupiter2.jpg", 600, 600, NULL, &lpTexs[i]); } //funkcja WczytajTeksture() void WczytajTeksture(LPDIRECT3DDEVICE9 pDevice, char *NazwaPliku, int Szerokosc, int Wysokosc, DWORD KeyColor, LPDIRECT3DTEXTURE9 *ppTexture) { D3DXCreateTextureFromFileEx(pDevice, // Uchwyt urządzenienia renderującego NazwaPliku, // Ścierzka do tekstury Szerokosc, // Szerokość tekstury, D3DX_DEFAULT aby Direct sam ja se dobrał Wysokosc, // Wysokość tekstury, D3DX_DEFAULT aby Direct sam ja se dobrał 0, // Mipmapowanie D3DPOOL_DEFAULT, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, KeyColor, // Kolor kluczowy NULL, NULL, ppTexture); // Wskaźnik do obiektu tekstury lpD3DDev->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); lpD3DDev->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); return; }
Tekstury trzymam w tablicy dynamicznej
PS. Wiem ze zmienna LPDIRECT3DTEXTURE9 moze zawierac 8 tekstur, ale to jest wersja 0.00001.
tak poza pytaniem w temacie:
ilosc_tekstur=iWczytajLinie(plik);
lpTexs = new LPDIRECT3DTEXTURE9[1]; //tu zamiast jeden powinno być ilosc_tekstur
/*for(int i=0;i<ilosc_tekstur;i++) {
WczytajLinie(plik);
WczytajTeksture(lpD3DDev, "data\\jupiter2.jpg", 600, 600, NULL, &lpTexs[i]); //tu by się chyba wykrzaczyło gdyby ilosc_tekstur równała się 2
}
LPDIRECT3DTEXTURE9 to obiekt reprezentujący jedną teksturę, a 8 tekstur moze być renderowanych w jednym wywołaniu funkcji D(I)P.
A na jakim modelu renderujesz tą teksturę (pewnie kula z teksturą jowisza), jesteś pewny że tekstura się wczytala z dysku, i co to znaczy że się nic nie wyświetla, czy jest czarny ekran, czy taki jakim czyściłeś ekran??
dużo pytań, ale odpowiedz to łatwiej bedzie pomóc...
Użytkownik Futhark edytował ten post 05 marzec 2005, 21:14
juz problem rozwiazalem, meczylem sie caly dzien az wreszcie wpadlem ze blad jest w innym miejscu. blad znajdowal sie w funkcji initBW(), polegal na zlych ustawieniach parametrow SetTextureStageState() a wynikal stad ze niemialem szablonu aplikacji i urzylem tego na ktorym uczylem sie mieszania barw z teksturami. co do
ilosc_tekstur=iWczytajLinie(plik); lpTexs = new LPDIRECT3DTEXTURE9[1]; //tu zamiast jeden powinno być ilosc_tekstur /*for(int i=0;i<ilosc_tekstur;i++) { WczytajLinie(plik); WczytajTeksture(lpD3DDev, "data\\jupiter2.jpg", 600, 600, NULL, &lpTexs[i]); //tu by się chyba wykrzaczyło gdyby ilosc_tekstur równała się 2 }
tyle bledow w tym fragmecie kodu nie bylo, tylko ze przedtym jak zrozpaczony kopiowalem kod na forum eksperymentowalem z roznymi ustawieniami.
Tak na marginesie, na ilu forach założyłeś ten topic :P ?
Ekspert,warsztat,dimme...cośtam3 i jakie jeszcze ?
Użytkownik Zombiak edytował ten post 06 marzec 2005, 05:38
Tak na marginesie, na ilu forach założyłeś ten topic :P ?
Ekspert,warsztat,dimme...cośtam3 i jakie jeszcze ?
