MetalowyNerd Opublikowano 22 Października 2016 Udostępnij Opublikowano 22 Października 2016 Witam. Mam drobny problem z teksturą szyby w grze. Chodzi o to, że jest ona przezroczysta, jednak przez nią nie widać innych obiektów typu ściany, bonusy. Jak można tą śrubkę dokręcić? Oto screen z problemem przezroczystości. Za tymi blokami szkła, powinny być widoczne nieprzezroczyste ściany takie, jak po bokach. I żeby nie otwierać niepotrzebnie kolejnego tematu, mam drugie pytanie. Jak naprawić problem z niełączeniem się tekstur szyby? Chodzi mi po prostu o to, żeby łączenia między szybami nie były widoczne, co też widać na tym screenie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Października 2016 Udostępnij Opublikowano 22 Października 2016 Chyba włączenie tego pomoże: http://docs.yoyogames.com/source/dadiospic...alpha_test.html Co do drugiego: Problem jest taki że ty stawiasz po prostu klocki, sześciany. Musiałbyś zrobić to samymi funkcjami od stawiania ścian d3d_draw_wall. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 22 Października 2016 Udostępnij Opublikowano 22 Października 2016 1. Przeważnie problem polega na kolejności rysowanych elementów, przezroczyste elementy rysuje się jako ostatnie (w gm mniejsza wartość depth). Jeżeli włączysz alpha test i dasz wartość referencyjną np. 40%, elementy będą nakładane na przezroczyste, co straci efekt jakby obiekt stał za szkłem. 2. Wystarczy nie rysować niepotrzebnych ścian, np. sprawdzając, czy po bokach nie stoi już jakaś ściana. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 22 Października 2016 Autor Udostępnij Opublikowano 22 Października 2016 I am Lord - już używam alpha testu do tego, żeby szyba miała "kanał alpha" ;) Konrad-GM - pomogło, gdy zmieniłem głębie szkła z 0 na -1, jednak nadal mam problem z łączeniami. Możesz wytłumaczyć, jak to dokładnie zrobić, bo nie czaję, a to nie wygląda za ciekawie z takimi łączeniami Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Października 2016 Udostępnij Opublikowano 23 Października 2016 Możesz użyć tego bardzo prostego rozwiązania https://forum.gmclan.org/index.php?showtopi...st&p=411717 przygotuj sobie 16 konfiguracji swoich modeli ścian szyby i zapisz je w tablicy w tej kolejności jak pokazałem na obrazku. Oczywiście zamiast image index będziesz zmieniał index tablicy w której te modele masz zapisane. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 25 Października 2016 Autor Udostępnij Opublikowano 25 Października 2016 Niestety zmiana głębi z 0 na -1 nie działała do końca tak, jak bym tego chciał, bo gdy popatrzyłem jakby od drugiej strony tego szkła, to nie było widać przez nie innych bloków szkła. Teraz to poprawiłem, ale dzięki za nakierowanie, że chodzi o depth ;). Naprawiłem to tak: DRAW EVENT w bloku szkła GML distance = point_distance(x,y,o_player.x,o_player.y); depth = (1000 - distance) * (-1) Jednak jeśli chodzi o ten drugi problem. Nie ma jakiegoś prostszego sposobu? Trzeba koniecznie robić tyle modeli? Jeśli tak, to po prostu wykorzystam "d3d_draw__wall()" bo jeśli chodzi o modelowanie bardziej skomplikowanych modeli, to niestety Sketchup już mi nie pomoże, bo nie mam tam już eksportu do OBJ, czy jakiegoś w ten deseń, który obsługuje GM:S. Nie da się usuwać ścian figur, które na przykład są "w sobie", serio? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 25 Października 2016 Udostępnij Opublikowano 25 Października 2016 Chcę podrzucić prostą anegdotkę. Ten sam problem wciąż występuje w Minecrafcie. Jeżeli ustawicie wodę która jest przezroczysta za szybą która jest także przezroczysta to silnik tego nie obsłuży i nie będzie rysować dalszego obiektu. To nie jest prosty problem a jest na prawdę wielowarstwowy. Z tego co się orientuję jest to rozwiązane właśnie przez depth, ale nie w taki sposób jak to się wydaje. Po prostu najpierw rysowane są wszystkie nieprzezroczyste obiekty, a potem rysowane są te przezroczyste. I to udało Ci się rozwiązać. Przypadkiem. Rozwiązanie łączenia się szyb wymaga tu jednak czegoś skomplikowanego. Jedno rozwiązanie które mi przychodzi do głowy to: dla bloku szkła sprawdzanie z których stron jest obserwowany (raycast 3D) i rysowanie tylko tych ścian. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 26 Października 2016 Udostępnij Opublikowano 26 Października 2016 Ale nie potrzebny ci żaden program do rysowania modeli. Możesz stworzyć własny model uzywając GML, to będzie bardzo proste. Najbardziej skomplikowany model w tym rozwiązaniu to tylko 4 wywołania funkcji d3d_draw_wall. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 26 Października 2016 Autor Udostępnij Opublikowano 26 Października 2016 A zapytam jeszcze z innej beczki, acz w sumie też pasuje do tematu. Czy da się zmienić teksturę na przykład tylko jednej ściany sześcianu rysowanego przez "d3d_draw_block", czy do tego też trzeba dorysować ścianę (d3d_draw_wall) po którymś z pożądanych boków? Tak pytam z ciekawości, ale w sumie i tak mi to będzie najprawdopodobniej potrzebne za jakiś czas. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 27 Października 2016 Udostępnij Opublikowano 27 Października 2016 Nie pamiętam dokładnie jak to było. Musiałbyś przenieść d3d_draw_block() by był wewnątrz nowo tworzonego modelu i wtedy chyba model może dostać teksturę. Przyjdzie I am Lord i mnie poprawi. A nie możesz narysować d3d_draw_wall() na d3d_draw_block() bo dojdzie do clipingu. Obie będą siebie zasłaniać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 27 Października 2016 Udostępnij Opublikowano 27 Października 2016 A nie możesz narysować d3d_draw_wall() na d3d_draw_block() bo dojdzie do clipingu. Obie będą siebie zasłaniać. Wystarczy narysować o 1 jednostkę odległości z przodu. W taki sposób robi się decale, czyli wszystkie efekty zniszczeń krwi itd w grach. d3d_draw_block() nie zrobisz różnych textur ścian bo tam UV mapa jest skopana. Trzeba zrobić własny model sześcianu tymi http://docs.yoyogames.com/source/dadiospic...dels/index.html funkcjami lub narysować sobie w Blenderze z poprawnym UV. Jak nie zapomnę to ci taki model zrobię w weekend. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MetalowyNerd Opublikowano 28 Października 2016 Autor Udostępnij Opublikowano 28 Października 2016 Oks, postaraj się nie zapomnieć, będę za to bardzo wdzięczny :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 30 Października 2016 Udostępnij Opublikowano 30 Października 2016 No dobra zrobiłem 2 wersje takich bloczków. Jeden jest bez sufitu i podłogi, ma 4 ściany a drugi normalny sześcian. Użyłem pr_trianglelist zamiast optymalniejszego pr_trianglestrip ponieważ to drugie byłoby ci o wiele trudniej zrozumieć. Wobec tego w modelu nakładają się na siebie wierzchołki, wizualnie to zupełnie nic nie zmienia. Oczywiście w przypadku z 6 scianami textury będą mniejszej rozdzielczości bo zajmują więcej miejsca na obrazku. Chyba że zwiększysz obrazek. Jak zmienisz wielkość obrazka to musisz zmienić 'len' 4 ścienny: tworzenie modelu. Zmienna 's' odpowiada za wielkość bloczku, a tekturę ustaw swój sprite według szablonu GML s = 64; textura = sprite_get_texture(sCubeTex4, 0); cube4 = d3d_model_create(); d3d_model_primitive_begin(cube4, pr_trianglelist); /* Widok z gory, numery scian, kropka to origin xxxx 1 xxxx /\ -y x x || 4 . 2 || UpVector = ( 0, 0, 1 ) x x || czyli os Z to wysokosc i jest dodatnia xxxx 3 xxxx []========> x */ len = 256/512; // dlugosc textury na spritcie wyrazona w wartosci od 0 do 1 // sciana 1 // trojkat 1 d3d_model_vertex_normal_texture(cube4, s, -s, -s, 0, -1, 0, 0, len); d3d_model_vertex_normal_texture(cube4, s, -s, s, 0, -1, 0, 0, 0); d3d_model_vertex_normal_texture(cube4, -s, -s, s, 0, -1, 0, len, 0); // trojkat 2 d3d_model_vertex_normal_texture(cube4, s, -s, -s, 0, -1, 0, 0, len); d3d_model_vertex_normal_texture(cube4, -s, -s, s, 0, -1, 0, len, 0); d3d_model_vertex_normal_texture(cube4, -s, -s, -s, 0, -1, 0, len, len); // sciana 2 // trojkat 1 d3d_model_vertex_normal_texture(cube4, s, s, -s, 1, 0, 0, len, len); d3d_model_vertex_normal_texture(cube4, s, s, s, 1, 0, 0, len, 0); d3d_model_vertex_normal_texture(cube4, s, -s, s, 1, 0, 0, len+len, 0); // trojkat 2 d3d_model_vertex_normal_texture(cube4, s, s, -s, 1, 0, 0, len, len); d3d_model_vertex_normal_texture(cube4, s, -s, s, 1, 0, 0, len+len, 0); d3d_model_vertex_normal_texture(cube4, s, -s, -s, 1, 0, 0, len+len, len); // sciana 3 // trojkat 1 d3d_model_vertex_normal_texture(cube4, -s, s, -s, 0, 1, 0, 0, len+len); d3d_model_vertex_normal_texture(cube4, -s, s, s, 0, 1, 0, 0, len); d3d_model_vertex_normal_texture(cube4, s, s, s, 0, 1, 0, len, len); // trojkat 2 d3d_model_vertex_normal_texture(cube4, -s, s, -s, 0, 1, 0, 0, len+len); d3d_model_vertex_normal_texture(cube4, s, s, s, 0, 1, 0, len, len); d3d_model_vertex_normal_texture(cube4, s, s, -s, 0, 1, 0, len, len+len); // sciana 4 // trojkat 1 d3d_model_vertex_normal_texture(cube4, -s, -s, -s, -1, 0, 0, len, len+len); d3d_model_vertex_normal_texture(cube4, -s, -s, s, -1, 0, 0, len, len); d3d_model_vertex_normal_texture(cube4, -s, s, s, -1, 0, 0, len+len, len); // trojkat 2 d3d_model_vertex_normal_texture(cube4, -s, -s, -s, -1, 0, 0, len, len+len); d3d_model_vertex_normal_texture(cube4, -s, s, s, -1, 0, 0, len+len, len); d3d_model_vertex_normal_texture(cube4, -s, s, -s, -1, 0, 0, len+len, len+len); d3d_model_primitive_end(cube4); Sześcian: GML /// model create s = 64; textura = sprite_get_texture(sCubeTex6, 0); cube6 = d3d_model_create(); d3d_model_primitive_begin(cube6, pr_trianglelist); len = 170/512; // dlugosc textury na spritcie wyrazona w wartosci od 0 do 1 // sciana 1 // trojkat 1 d3d_model_vertex_normal_texture(cube6, s, -s, -s, 0, -1, 0, 0, len); d3d_model_vertex_normal_texture(cube6, s, -s, s, 0, -1, 0, 0, 0); d3d_model_vertex_normal_texture(cube6, -s, -s, s, 0, -1, 0, len, 0); // trojkat 2 d3d_model_vertex_normal_texture(cube6, s, -s, -s, 0, -1, 0, 0, len); d3d_model_vertex_normal_texture(cube6, -s, -s, s, 0, -1, 0, len, 0); d3d_model_vertex_normal_texture(cube6, -s, -s, -s, 0, -1, 0, len, len); // sciana 2 d3d_model_vertex_normal_texture(cube6, s, s, -s, 1, 0, 0, len, len); d3d_model_vertex_normal_texture(cube6, s, s, s, 1, 0, 0, len, 0); d3d_model_vertex_normal_texture(cube6, s, -s, s, 1, 0, 0, len+len, 0); d3d_model_vertex_normal_texture(cube6, s, s, -s, 1, 0, 0, len, len); d3d_model_vertex_normal_texture(cube6, s, -s, s, 1, 0, 0, len+len, 0); d3d_model_vertex_normal_texture(cube6, s, -s, -s, 1, 0, 0, len+len, len); // sciana 3 d3d_model_vertex_normal_texture(cube6, -s, s, -s, 0, 1, 0, 0, len+len); d3d_model_vertex_normal_texture(cube6, -s, s, s, 0, 1, 0, 0, len); d3d_model_vertex_normal_texture(cube6, s, s, s, 0, 1, 0, len, len); d3d_model_vertex_normal_texture(cube6, -s, s, -s, 0, 1, 0, 0, len+len); d3d_model_vertex_normal_texture(cube6, s, s, s, 0, 1, 0, len, len); d3d_model_vertex_normal_texture(cube6, s, s, -s, 0, 1, 0, len, len+len); // sciana 4 d3d_model_vertex_normal_texture(cube6, -s, -s, -s, -1, 0, 0, len, len+len); d3d_model_vertex_normal_texture(cube6, -s, -s, s, -1, 0, 0, len, len); d3d_model_vertex_normal_texture(cube6, -s, s, s, -1, 0, 0, len+len, len); d3d_model_vertex_normal_texture(cube6, -s, -s, -s, -1, 0, 0, len, len+len); d3d_model_vertex_normal_texture(cube6, -s, s, s, -1, 0, 0, len+len, len); d3d_model_vertex_normal_texture(cube6, -s, s, -s, -1, 0, 0, len+len, len+len); // góra d3d_model_vertex_normal_texture(cube6, -s, s, s, 0, 0, 1, len*2, len); d3d_model_vertex_normal_texture(cube6, -s, -s, s, 0, 0, 1, len*2, 0); d3d_model_vertex_normal_texture(cube6, s, -s, s, 0, 0, 1, len*3, 0); d3d_model_vertex_normal_texture(cube6, -s, s, s, 0, 0, 1, len*2, len); d3d_model_vertex_normal_texture(cube6, s, -s, s, 0, 0, 1, len*3, 0); d3d_model_vertex_normal_texture(cube6, s, s, s, 0, 0, 1, len*3, len); // dol d3d_model_vertex_normal_texture(cube6, -s, -s, -s, 0, 0, -1, len*2, len*2); d3d_model_vertex_normal_texture(cube6, -s, s, -s, 0, 0, -1, len*2, len); d3d_model_vertex_normal_texture(cube6, +s, s, -s, 0, 0, -1, len*3, len); d3d_model_vertex_normal_texture(cube6, -s, -s, -s, 0, 0, -1, len*2, len*2); d3d_model_vertex_normal_texture(cube6, s, s, -s, 0, 0, -1, len*3, len); d3d_model_vertex_normal_texture(cube6, s, -s, -s, 0, 0, -1, len*3, len*2); d3d_model_primitive_end(cube6); wyświetlanie: GML d3d_model_draw(cube4, x, y, z, textura); d3d_model_draw(cube6, x, y, z, textura); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę