I am Lord Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 Robię sobie edytor do map 3d wzorowany na tych, które oferują nam edycję plików .wad Doom, Doom II czy Hexen. Zrobiłem już rysowanie ścian, odwracanie ich normalnych [ screen 1 ] oraz rysowanie podłóg. O ile rysowanie ścian to proste zagadnienie gdyż ściany zawsze są prostokątem o tyle rysowanie podłogi to już hardcore bo kształt podłogi może przybierać dowolną formę, z dowolna ilością wierzchołków [ screen 2 ] ponad to musiałem zastosować konwersję rysowanego polygonu na trójkąty [ screen 3 ], które potem zostają zgrupowane jako sectory i wyświetlane w widoku 3D. Wszystko przebiega sprawnie do momentu kiedy chcę nałożyć texturę na podłogę. Nie potrafię sobie nawet wyobrazić jak mógł by wyglądać scrypt do układania współrzędnych textur tego kompleksu trójkątów w taki sposób aby gracz miał złudzenie że widzi pod sobą jedną teksturę [ screen 4 ] a nie dziesiątki trójkątów [ screen 5 ]. Kod na Wyświetlanie podłogi wygląda u mnie tak: global.levelFloorCount to ilość podług global.tex[0] to tekstura ceglanego murka triangleCount to ilość trójkątów w sprawdzanej podłodze triangleX1[i,j] triangleY1[i,j] triangleX2[i,j] to są współrzędne 3 wierzchołków składających się na 1 trójkąt współrzędne są generowane za pomocą tego skryptu polygon_to_triangles triangleY2[i,j] triangleX3[i,j] triangleY3[i,j] GML for ( i = 0; i < global.levelFloorCount; i += 1 ) { var w, h; w = 0; h = 0; d3d_primitive_begin_texture(pr_trianglelist,global.tex[0]); for ( j = 0; j < camera.triangleCount; j += 1 ) { if ( w == _7 ) w = 1; else w = 0; if ( h == _9 ) h = 1; else h = 0; /* na to nie musicie patrzeć zrobiłem to dla debuga [ w widoku 3d klawiszami numpadu 7,9,4,6,1,3 można zmieniać w real time współrzędne textur ]*/ d3d_vertex_texture(camera.triangleX1[i,j],camera.triangleY1[i,j],0,w,h); if ( w == _4 ) w = 1; else w = 0; if ( h == _6 ) h = 1; else h = 0; d3d_vertex_texture(camera.triangleX3[i,j],camera.triangleY3[i,j],0,w,h); if ( w == _1 ) w = 1; else w = 0; if ( h == _3 ) h = 1; else h = 0; d3d_vertex_texture(camera.triangleX2[i,j],camera.triangleY2[i,j],0,w,h); }; d3d_primitive_end(); } Dla lepszego zobrazowania wszystkiego daję jeszcze plik exe edytora: http://www.gmclan.org/up539_4_jakisFPS.html po uruchomieniu wyświetla się od razu widok 3D, klawiszem F12 wchodzimy w 2d naciskamy 'M' zmieniając tryb z rysowania ścian na rysowanie podłogi i rysujemy kształt myszką ważna rzecz kształt musi być rysowany w kierunku przeciwnym do wskazówek zegara a linie nie mogą się przecinać, kształt musi być zapętlony wciskamy F12 i widzimy rezultaty Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Assassin Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 Nie rozumiem, gdzie tu jest problem .__. górnylewy 0,0 górnyprawy 1,0 dolnylewy 0,1 dolnyprawy 1,1 ważna rzecz kształt musi być rysowany w kierunku przeciwnym do wskazówek zegara a linie nie mogą się przecinać omg Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 29 Maja 2010 Autor Udostępnij Opublikowano 29 Maja 2010 górnylewy 0,0 górnyprawy 1,0 dolnylewy 0,1 dolnyprawy 1,1 trójkąt ma 3 wierzchołki już rozumiesz? przyciskami 7 9 4 6 1 3 można je zmieniać da się wykonać nimi 64 kombinacje, sprawdziłem wszystkie i żadna nie układa textur prawidłowo. Myślę że za tym musi stać jakiś większy algorytm. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Assassin Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 trójkąt ma 3 wierzchołki już rozumiesz? Kurde sry pomyliłem się, mam zagrożenie z matmy :( . Haha, koleżko, nie podałem ci współrzędnych do trójkąta, tylko do textury. Jak już rysujesz te swoje kwadracioki, to zrób jakąś funkcję, która dzieli go na 2 trójkąty i przypisuje odpowiednie współrzędne texturze, takie to niezrozumiałe ? I nie chcę mi się testować twoich przycisków numerkowych, jeśli KOLEJNOŚĆ jest zła, to obrót textury nic nie da. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 29 Maja 2010 Autor Udostępnij Opublikowano 29 Maja 2010 I nie chcę mi się testować twoich przycisków numerkowych nie musisz ja przetestowałem wszystkie możliwości i nie działa funkcja która dzieli kwadraty na pół to jest już zrobiona tylko kłopot jest właśnie ze przypisaniem współrzędnych textur Kwadrat może być podzielony na 2 sposoby, współrzędne w każdym z nich muszą być ustawiane inaczej: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Assassin Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 I masz teraz w każdym kwadracie 4 wierzchołki. Teksturom na nich przypisujesz to, co już napisałem: górnylewy 0,0 górnyprawy 1,0 dolnylewy 0,1 dolnyprawy 1,1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 Mam nastepujace pytanko, czy nie mozna rysowac floora o wymiarach max_szerokosc_levelu * max_wysokosc_levelu? Przeciez w czasie gry to, co za pomieszczeniem, jest niewidoczne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
wikku9 Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 można robić większe floory niż room. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 Mowiac 'level' nie mam na mysli 'room', tylko model mapy. Dlaczego gdy gra sie w Quake'a, nie mowi sie 'hurra, jestem w nowym roomie', tylko 'wreszcie nowy level'? =P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
DobryZiom Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 filozof się znalazł xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 Mam nastepujace pytanko, czy nie mozna rysowac floora o wymiarach max_szerokosc_levelu * max_wysokosc_levelu? Przeciez w czasie gry to, co za pomieszczeniem, jest niewidoczne. Tyle ze ten edytor zapewne ma oferować coś więcej niż płaski level ------------------ Nie znam się na tym za bardzo, ale myślę że tak, wielkość i szerokość Podłogi,było by jako 100%w x i y i teraz byś musiał wziąć danego trisa współrzędne obliczyć jaki to procent z tych 100% dzięki temu powinieneś uzyskać mapowanie uv w tym momencie miał byś jedną texturę dobrze rozłożoną na cały level, jakbyś chciał mieć bardziej zloopowaną, bierzesz i dzielisz wszystkie wspułżedne. jak już wspomniałem nie znam się za dobrze na tym, raczej tak na logikę, rzucę screena by zobrazować tu akurat są quady ale i na tris powinno zadziałać ten sposób akurat może rozciągać texture, ale zawsze powinien być dobrze rozłożony, jakbyś chciał mieć dobrze rozłożoną textury musiał byś wziąć i porównać szerokość i wysokość, najmniejszych i największych współrzędnych, po czym obliczyć różnice w procentach i daną część podzielić przez uzyskaną różnice. ------------------------------------------------------------------------- Mógłbyś też dodać osobno 2 poli jako wyznaczniki skali Mam nadzieje że pomogłem a nie plete głupoty :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Assassin Opublikowano 29 Maja 2010 Udostępnij Opublikowano 29 Maja 2010 Dobrze mówi. Ale nie wiem, czy to takie proste będzie ;) . 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ę