Skocz do zawartości

Boki budynków migotają


Ice Cube
 Udostępnij

Przejdź do rozwiązania Rozwiązane przez Konrad-GM,

Rekomendowane odpowiedzi

W gierce 3d mam sporo budynków różnej wielkości i pod różnym kątem porozrzucanych po planszy.

gdy jestem blisko jakiegokolwiek budynku to wygląda on dobrze, natomiast jeżeli sie oddale od niego dosyć daleko

to jego boki migotają, nakłądaja sie na siebie textury scian.

bloki sa zbudowane z 4x d3d_draw_wall

textury starałem się by miały wymiary 256x256  lub 256x128 pix.

 

Idzie to jakoś poprawić ?

 

Odnośnik do komentarza
Udostępnij na innych stronach

Niestety to jest związane z precyzją depth buffera, oddalone "piksele" nie mają dostatecznej precyzji aby nałożone na siebie elementy rysowały się w odpowiedniej kolejności, tzw. z-fighting https://en.wikipedia.org/wiki/Z-fighting i nie ma to żadnego związku z rozmiarem tekstur

 

Jednym ze sposobów (i chyba najprostszym) może być przesunięcie elementów o niewielką wartość, aby tekstury rysowane d3d_draw_wall nie nachodziły idealnie na siebie.

  • Lubię (+1) 1
Odnośnik do komentarza
Udostępnij na innych stronach

bloki:

//1

d3d_draw_wall(1880,1310,80,1940,1310,0,background_get_texture(blok1),1,1);
d3d_draw_wall(1940,1310,80,1940,1410,0,background_get_texture(blok1),1,1);
d3d_draw_wall(1940,1410,80,1880,1410,0,background_get_texture(blok1),1,1);
d3d_draw_wall(1880,1410,80,1880,1310,0,background_get_texture(blok1),1,1);
//2 
d3d_draw_wall(1990,1420,106,2190,1420,0,background_get_texture(blok2),1,1);
d3d_draw_wall(2190,1420,106,2190,1580,0,background_get_texture(blok2),1,1);
d3d_draw_wall(2190,1580,106,1990,1580,0,background_get_texture(blok2),1,1);
d3d_draw_wall(1990,1580,106,1990,1420,0,background_get_texture(blok2),1,1);

itd..

 

player/camera:

 

DRAW:

d3d_set_projection(    x, y, z,  x + global.camcos, y + global.camsin, z + global.campitch, 0, 0, 1);

 

 

 

 

grafiki nie umiem dodać ,pisze ze max grafiki to 808 b mb ,  a plik ma 46 kb..

Odnośnik do komentarza
Udostępnij na innych stronach

18 godzin temu, Ice Cube napisał:

bloki:

//1

d3d_draw_wall(1880,1310,80,1940,1310,0,background_get_texture(blok1),1,1);
d3d_draw_wall(1940,1310,80,1940,1410,0,background_get_texture(blok1),1,1);
d3d_draw_wall(1940,1410,80,1880,1410,0,background_get_texture(blok1),1,1);
d3d_draw_wall(1880,1410,80,1880,1310,0,background_get_texture(blok1),1,1);
//2 
d3d_draw_wall(1990,1420,106,2190,1420,0,background_get_texture(blok2),1,1);
d3d_draw_wall(2190,1420,106,2190,1580,0,background_get_texture(blok2),1,1);
d3d_draw_wall(2190,1580,106,1990,1580,0,background_get_texture(blok2),1,1);
d3d_draw_wall(1990,1580,106,1990,1420,0,background_get_texture(blok2),1,1);

itd..

Sorry ale nie mam GMa i czasu, żeby sobie rozrysować to na papierze, bo ten ciąg liczb ciężko mi sobie wyobrazić jako bryłę

 

18 godzin temu, Ice Cube napisał:

player/camera:

 

DRAW:

d3d_set_projection(    x, y, z,  x + global.camcos, y + global.camsin, z + global.campitch, 0, 0, 1);

Ustaw poprawnie projekcję tak jak rekomenduje to dokumentacja:
https://docs.yoyogames.com/source/dadiospice/002_reference/drawing/drawing 3d/3d projections/d3d_set_projection.html

Najpierw użyj w tym celu d3d_set_projection_ext i ustaw zfar na jakąś rozsądną wartość, np 2000 albo nawet mniejszą, żeby nie wypaść z precyzji z-buffera.

Obrazek wrzuć na inny serwis, np. https://imgur.com/ i zwyczajnie wklej linka

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

 

18 godzin temu, Ice Cube napisał:

grafiki nie umiem dodać ,pisze ze max grafiki to 808 b mb ,  a plik ma 46 kb..

Zwyczajnie wklej obrazek jak do painta.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
8 godzin temu, Konrad-GM napisał:

"Wykorzystano całą dozwoloną przestrzeń dla załączników"

Faktycznie, 500kb było dla użytkowników, to pewnie przez aktualizację forum. Zmienione :)

  • Lubię (+1) 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • Rozwiązanie
Godzinę temu, Ice Cube napisał:

ccc.jpg

Na moje oko wygląda to na z-fighting, precyzji z-buffera w GM nie można zmienić, ale zakładam, że i tak jest ustawiony na 24bity. Niestety pozostaje zmniejszenie maksymalnej odległości rysowania na mniejszą, albo zrobić niewielką przestrzeń między nakładającymi się teksturami, bądź w ogóle nie rysować nakładających się ścian.

  • Lubię (+1) 1
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...