Ĺadny brzuch
Kurde, już się chyba z 2 tygodnie nad tym męcze. Problem jest raczej banalny: musze wyrenderować mape za pomocą index buffora a potem wyrenderować mesha z pliku *.x , no i nieidzie mi to zabardzo.
To jest wewnątrz funkcji Render():
RysujMape(); i=1; D3DXMatrixTranslation( &matWorldR, gracze[i].x, 0, 0); lpD3DDev->SetTransform(D3DTS_WORLD,&matWorldR); RenderujMesha(0); D3DXMatrixIdentity( &matWorldR); lpD3DDev->SetTransform(D3DTS_WORLD,&matWorldR); i=0; vEyePt.x=gracze[i].x; vEyePt.y=gracze[i].y; vEyePt.z=gracze[i].z; vLookatPt.x=(float)sin(-gracze[i].ry/180*D3DX_PI)+gracze[i].x; vLookatPt.y=gracze[i].y; vLookatPt.z=(float)cos(-gracze[i].ry/180*D3DX_PI)+gracze[i].z; vUpVec.x=0.0; vUpVec.y=1.0; vUpVec.z=0.0; D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); //utworzenie macierzy widoku lpD3DDev->SetTransform( D3DTS_VIEW, &matView ); //poinformowanie o niej directx
Wygląda banalnie, co nie?
Pewnie zauwarzyliście, że transformacje mesha narazie uprościłem do osi X(nawet na tej osi mi nie wychodzi :( ).
W czym thwi problem:
Niewiadomo dlaczego(przynajmniej ja niewiem) gdy gracze[i].x osiągnie wartość większą niż 7 wszystko znika, nawet licznik FPS(a to dziwne). Po tym jak się męczyłem z tym problemem postanowiłem że musze jakoś inaczej przemieścić mesha, czy istnieje jakiś inny sposób na przemieszczenie mesha niż modyfikowanie macierzy świata??
Jeśli nie to może podam kody funkcji RenderujMesha() i RysujMape(), może Wam może uda się znaleźć jakiś błąd.
RenderujMesha():
void RenderujMesha(int number) { for(DWORD i=0; i<Mesh[number].NumberOfMaterials; i++ ) { Â lpD3DDev->SetMaterial( &MeshMaterials[i] ); Â lpD3DDev->SetTexture( 0, MeshTextures[i] ); Â Mesh[number].obiekt->DrawSubset( i ); } return; }
RysujMape():
void RysujMape() { for(int i=0;i<ilosc_tekstur;i++) { lpD3DDev->SetTexture( 0, tekstury[i].Tekstura ); lpD3DDev->SetIndices(g_IB); lpD3DDev->SetStreamSource(0,g_pVB,0,sizeof(WIERZCHOLEK)); lpD3DDev->SetFVF( D3DFVF_WIERZCHOLEK ); if(i>0) { lpD3DDev->DrawIndexedPrimitive( Â Â D3DPT_TRIANGLELIST, Â Â tekstury[i-1].ilosc_wierzcholkow, Â Â 0, Â Â tekstury[i].ilosc_wierzcholkow, Â Â 0, Â Â tekstury[i].ilosc_face ); } else if(i==0) { lpD3DDev->DrawIndexedPrimitive( Â Â D3DPT_TRIANGLELIST, Â Â 0, Â Â 0, Â Â tekstury[i].ilosc_wierzcholkow, Â Â 0, Â Â tekstury[i].ilosc_face ); } } return; }
To dla mnie b. warzny projekt więc będe wdzięczny za wszelkie odpowiedzi.
Użytkownik mark_ edytował ten post 09 kwiecień 2005, 12:22
mhmmm... mark_, powiem ci co ja o tym myślę,
na pierwszy rzut oka rendering siatek wydaje się OK, wydaje mi sie tez, ze blad lezy podczas przygotowywania macierzy transformacji, jeżeli przy wartości 7 po prostu macierze sprawiają, że obraz znika to masz coś źle z obliczeniami, może kamera dla 7 patrzy w ogóle innym kierunku, a może cała renderowana siatka wychodzi poza bryłę widzenia, trudno powiedzieć, no to żadna pomoć z mojej strony, trzebaby to sprawdzić dokładniej...
mhmmm... mark_, powiem ci co ja o tym myślę,
na pierwszy rzut oka rendering siatek wydaje się OK, wydaje mi sie tez, ze blad lezy podczas przygotowywania macierzy transformacji, jeżeli przy wartości 7 po prostu macierze sprawiają, że obraz znika to masz coś źle z obliczeniami, może kamera dla 7 patrzy w ogóle innym kierunku, a może cała renderowana siatka wychodzi poza bryłę widzenia, trudno powiedzieć, no to żadna pomoć z mojej strony, trzebaby to sprawdzić dokładniej...
Niestety to niechodzi o kierunek patrzenia kamery, ponieważ znika też licznik FPS wyświetlany za pomocą DrawText() i sprajt (Draw()) który jest w prawym dolnym rogu zawsze
//EIDT: pozatym przy 7.499999 wszystko widać a przy 7.5 już ekran staje się czarny
//EDIT2: a czy istnieje jakiś inny sposób na przesunięcie mesha niż D3DXMatrixTranslation() ??
no a czy po translacji mesha przywracasz wczesniejsza macierz, zanim wyrenderujesz licznik FPS?
no a czy po translacji mesha przywracasz wczesniejsza macierz, zanim wyrenderujesz licznik FPS?
ale jestes pewien ze jest niezalezny? sprobuj przed rysowaniem licznika przywrocic macierz sprzed translacji
ale jestes pewien ze jest niezalezny? sprobuj przed rysowaniem licznika przywrocic macierz sprzed translacji
tzn kiedy obraz znika? napsiz to wszystko jeszcze raz i troche jasniej, dobrze?
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
To jest wewnątrz funkcji Render():
RysujMape(); i=1; D3DXMatrixTranslation( &matWorldR, gracze[i].x, 0, 0); lpD3DDev->SetTransform(D3DTS_WORLD,&matWorldR); RenderujMesha(0); D3DXMatrixIdentity( &matWorldR); lpD3DDev->SetTransform(D3DTS_WORLD,&matWorldR); i=0; vEyePt.x=gracze[i].x; vEyePt.y=gracze[i].y; vEyePt.z=gracze[i].z; vLookatPt.x=(float)sin(-gracze[i].ry/180*D3DX_PI)+gracze[i].x; vLookatPt.y=gracze[i].y; vLookatPt.z=(float)cos(-gracze[i].ry/180*D3DX_PI)+gracze[i].z; vUpVec.x=0.0; vUpVec.y=1.0; vUpVec.z=0.0; D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); //utworzenie macierzy widoku lpD3DDev->SetTransform( D3DTS_VIEW, &matView ); //poinformowanie o niej directx
Wygląda banalnie, co nie?
Pewnie zauwarzyliście, że transformacje mesha narazie uprościłem do osi X(nawet na tej osi mi nie wychodzi :( ).
W czym thwi problem:
Niewiadomo dlaczego(przynajmniej ja niewiem) gdy gracze[i].x osiągnie wartość większą niż 7 wszystko znika, nawet licznik FPS(a to dziwne). Po tym jak się męczyłem z tym problemem postanowiłem że musze jakoś inaczej przemieścić mesha, czy istnieje jakiś inny sposób na przemieszczenie mesha niż modyfikowanie macierzy świata??
Jeśli nie to może podam kody funkcji RenderujMesha() i RysujMape(), może Wam może uda się znaleźć jakiś błąd.
RenderujMesha():
void RenderujMesha(int number) { for(DWORD i=0; i<Mesh[number].NumberOfMaterials; i++ ) { Â lpD3DDev->SetMaterial( &MeshMaterials[i] ); Â lpD3DDev->SetTexture( 0, MeshTextures[i] ); Â Mesh[number].obiekt->DrawSubset( i ); } return; }
RysujMape():
void RysujMape() { for(int i=0;i<ilosc_tekstur;i++) { lpD3DDev->SetTexture( 0, tekstury[i].Tekstura ); lpD3DDev->SetIndices(g_IB); lpD3DDev->SetStreamSource(0,g_pVB,0,sizeof(WIERZCHOLEK)); lpD3DDev->SetFVF( D3DFVF_WIERZCHOLEK ); if(i>0) { lpD3DDev->DrawIndexedPrimitive( Â Â D3DPT_TRIANGLELIST, Â Â tekstury[i-1].ilosc_wierzcholkow, Â Â 0, Â Â tekstury[i].ilosc_wierzcholkow, Â Â 0, Â Â tekstury[i].ilosc_face ); } else if(i==0) { lpD3DDev->DrawIndexedPrimitive( Â Â D3DPT_TRIANGLELIST, Â Â 0, Â Â 0, Â Â tekstury[i].ilosc_wierzcholkow, Â Â 0, Â Â tekstury[i].ilosc_face ); } } return; }
To dla mnie b. warzny projekt więc będe wdzięczny za wszelkie odpowiedzi.
Użytkownik mark_ edytował ten post 09 kwiecień 2005, 12:22
mhmmm... mark_, powiem ci co ja o tym myślę,
na pierwszy rzut oka rendering siatek wydaje się OK, wydaje mi sie tez, ze blad lezy podczas przygotowywania macierzy transformacji, jeżeli przy wartości 7 po prostu macierze sprawiają, że obraz znika to masz coś źle z obliczeniami, może kamera dla 7 patrzy w ogóle innym kierunku, a może cała renderowana siatka wychodzi poza bryłę widzenia, trudno powiedzieć, no to żadna pomoć z mojej strony, trzebaby to sprawdzić dokładniej...
mhmmm... mark_, powiem ci co ja o tym myślę,
na pierwszy rzut oka rendering siatek wydaje się OK, wydaje mi sie tez, ze blad lezy podczas przygotowywania macierzy transformacji, jeżeli przy wartości 7 po prostu macierze sprawiają, że obraz znika to masz coś źle z obliczeniami, może kamera dla 7 patrzy w ogóle innym kierunku, a może cała renderowana siatka wychodzi poza bryłę widzenia, trudno powiedzieć, no to żadna pomoć z mojej strony, trzebaby to sprawdzić dokładniej...

Niestety to niechodzi o kierunek patrzenia kamery, ponieważ znika też licznik FPS wyświetlany za pomocą DrawText() i sprajt (Draw()) który jest w prawym dolnym rogu zawsze
//EIDT: pozatym przy 7.499999 wszystko widać a przy 7.5 już ekran staje się czarny
//EDIT2: a czy istnieje jakiś inny sposób na przesunięcie mesha niż D3DXMatrixTranslation() ??


no a czy po translacji mesha przywracasz wczesniejsza macierz, zanim wyrenderujesz licznik FPS?
no a czy po translacji mesha przywracasz wczesniejsza macierz, zanim wyrenderujesz licznik FPS?

ale jestes pewien ze jest niezalezny? sprobuj przed rysowaniem licznika przywrocic macierz sprzed translacji
ale jestes pewien ze jest niezalezny? sprobuj przed rysowaniem licznika przywrocic macierz sprzed translacji

tzn kiedy obraz znika? napsiz to wszystko jeszcze raz i troche jasniej, dobrze?