Morti Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 Witam. Od pewnego czasu zajmuję się 3D i mam problem. Robię strzelankę. mam ustawione w celownik podążanie za myszką. Tylko że jak biorę myszkę do góry to celownik idzie na dół i na odwrót (na boki jest normalnie). I jak zrobić wykrywanie kolizji (screen) Robi mi się tak: PS: Jak zrobić idealną kule bo jak piszę to: GML d3d_draw_ellipsoid (x+0,y+0,0,x+50,y+50,-100,background_get_texture(texturka1),1,1,24); draw_set_color(c_white) To wychodzi mi jajko :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 co do 2 pytania (z kulą) to z powinno być ustawione na 50 czyli d3d_draw_ellipsoid (x+0,y+0,0,x+50,y+50,-50,background_get_texture(texturka1),1,1,24); draw_set_color(c_white) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morti Opublikowano 21 Marca 2011 Autor Udostępnij Opublikowano 21 Marca 2011 THX :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
OriPL Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 Co do kolizji to tak samo jak w 2D, wykrywasz kolizje z obiektem (najprosciej jest zrobić sprite o takiej samej szerokości i długości co model a następnie z tym spritem wykrywać kolizje). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 Ludzie przestańcie wreszcie rozpowszechniać tą złą metodę pisania kodu na rysowanie figur w 3D, wiem że to mniej tekstu i działa ale na dłuższą metę to beznadziejny sposób jak już to: d3d_transform_add_translation(x,y,z)//Jak nie masz zmiennej "Z" to daj tam 0 d3d_draw_ellipsoid (-25,-25,25, 25,25,-25,background_get_texture(texturka1),1,1,24) //Tak wiem zmieniłem pivot point na środek d3d_transform_set_identity() draw_set_color(c_white) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 Czy 'draw_set_color(c_white)' nie powinno być na początku? ( A jeszcze lepiej - tylko w create kontrolera ) :) Nie 'd3d_transform_add_translation', a 'd3d_transform_set_translation' ;) Co do zmiennej Z, ustaw ją na 25 jeśli używasz tego kodu do rysowania: GML d3d_draw_ellipsoid (-25,-25,25, 25,25,-25,background_get_texture(texturka1),1,1,24) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 raczej set gdy chce porostu narysować kule i ją przemieścić a add gdyby chciał ją obracać skalować itp. (pamiętam że miałem z tym problem przy set) dałem add bo jest bardziej funkcjonalny :3 Co do koloru to raczej zależy od jego kodu dlatego tego nie tykałem :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 W tym przypadku jak jest tylko jeden transform to wystarczy użyć seta i bez końcowego identity. Różnica pomiędzy set a add jest taka że set to połączenie 2 funkcji: d3d_transform_set_identity() oraz d3d_transform_* a add jest poprostu: d3d_transform_* bez identity na początku. czyli: GML d3d_transform_set_identity() d3d_transform_add_translation(x,y,z)//Jak nie masz zmiennej "Z" to daj tam 0 d3d_draw_ellipsoid (-25,-25,25, 25,25,-25,background_get_texture(texturka1),1,1,24) //Tak wiem zmieniłem pivot point na środek</span></span> będzie tym samym co: ( tylko optymalniejsze bo oszczędzamy na 1 wywołaniu ) GML d3d_transform_set_translation(x,y,z)//Jak nie masz zmiennej "Z" to daj tam 0 d3d_draw_ellipsoid (-25,-25,25, 25,25,-25,background_get_texture(texturka1),1,1,24) //Tak wiem zmieniłem pivot point na środek</span></span> a z kolei: GML d3d_transform_set_translation(x,y,z)//Jak nie masz zmiennej "Z" to daj tam 0 d3d_draw_ellipsoid (-25,-25,25, 25,25,-25,background_get_texture(texturka1),1,1,24) //Tak wiem zmieniłem pivot point na środek d3d_transform_set_identity() będzie nieoptymalne bo set_identity wykona się podwójnie. raz na początku i raz na końcu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 I jak wspomniałem add pozwoli na rotacje i skalowanie, bo trzba je wykonać pomiędzy d3d_transform_set_identity() a d3d_transform_add_translation(x,y,z) co jest niemożliwe w przypadku d3d_transform_set_translation(x,y,z) co sprawia że jest bardziej funkcjonalny ja jednak upierał bym się przy add Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 No w sumie to w tym konkretnym przypadku faktycznie powinno być add i identity bo prawdopodobnie przetransformuje mu jeszcze projekcję chyba że przed drawem projekcji wklei identity. Tak czy siak warto mieć na uwadze czym set i add się różni bo wiedząc to można zoptymalizować grę. edit: taki mały przykład prosto z mojej gry jak optymalnie stosować set i add kiedy musimy wyświetlić 2 modele naraz: GML d3d_transform_add_scaling(0.75, 0.75, 0.75); d3d_transform_add_rotation_z(dirXY + 270); d3d_transform_add_translation(x,y,z); d3d_model_draw(global.model_tank[0],0,0,0,background_get_texture(bg_tex_tank_dol)); d3d_transform_set_scaling(0.75, 0.75, 0.75); d3d_transform_add_rotation_z(dirXY + 90 ); d3d_transform_add_translation(x,y,z); d3d_model_draw(global.model_tank[1],0,0,0,background_get_texture(bg_tex_tank_dol)); d3d_transform_set_identity(); Można tutaj zauważyć że d3d_transform_set_identity(); jest użyte tylko raz, mogłem tak zrobić bo seta dałem w scaling 2 modelu ( oszczędność na wywołaniu 1 funkcji ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 Tak ale jeszcze optymalniej było by ręcznie zskalować model w programie do 3D skoro już wiesz o ile chcesz go zskalować :P GML d3d_transform_add_rotation_z(dirXY + 270); d3d_transform_add_translation(x,y,z); d3d_model_draw(global.model_tank[0],0,0,0,background_get_texture(bg_tex_tank_dol)); d3d_transform_set_rotation_z(dirXY + 90 ); d3d_transform_add_translation(x,y,z); d3d_model_draw(global.model_tank[1],0,0,0,background_get_texture(bg_tex_tank_dol)); d3d_transform_set_identity(); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 21 Marca 2011 Udostępnij Opublikowano 21 Marca 2011 Lol racja <face palm> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morti Opublikowano 22 Marca 2011 Autor Udostępnij Opublikowano 22 Marca 2011 Dzięki wszystkim za odpowiedz :) A co z tymi odwrotnymi kierunkami ?? Właśnie się skapłem, że wszystko co postawie w roomie, w grze jest "odwrócone". Tzn. jak coś jest w roomie na dole to w grze jest na górze :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 22 Marca 2011 Udostępnij Opublikowano 22 Marca 2011 To świadczy o tym że kamerę masz źle zdefiniowaną, tam jest pewnie błąd ale ciężko coś więcej powiedzieć nie znając kodu :3 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morti Opublikowano 22 Marca 2011 Autor Udostępnij Opublikowano 22 Marca 2011 W kamerze która jest też hero mam w step: GML if keyboard_check(ord('W')) y+=6; if keyboard_check(ord('S')) y-=6; if keyboard_check(ord('A')) x-=6; if keyboard_check(ord('D')) x+=6; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 22 Marca 2011 Udostępnij Opublikowano 22 Marca 2011 w trybie 3d oś Y jest odwrócona. To znaczy, że wzrasta do góry, a nie do dołu (współrzędne 0,0 są w lewym dolnym rogu) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LionX Dagger Opublikowano 22 Marca 2011 Udostępnij Opublikowano 22 Marca 2011 W kamerze która jest też hero mam w step: GML if keyboard_check(ord('W')) y+=6; if keyboard_check(ord('S')) y-=6; if keyboard_check(ord('A')) x-=6; if keyboard_check(ord('D')) x+=6; Pytałem się raczej o ustawienia d3d_set_projection() w trybie 3d oś Y jest odwrócona. To znaczy, że wzrasta do góry, a nie do dołu (współrzędne 0,0 są w lewym dolnym rogu) raczej bardziej zależy od ustawień d3d_set_projection() (Domyślnie możliwe, nie wiem bo zawszę korzystam kamery) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 22 Marca 2011 Udostępnij Opublikowano 22 Marca 2011 Tak jak LwiX Sztylet radzi, masz coś pochrzanione w 'd3d_set_projection*()', a dokładniej ( zapewne ) wektor 'UP' E: Albo nie oto chodzi :3 Możliwe że musisz zrobić taki myk przy ustawianu lookat wektora: GML ...cos(degtorad(direction+90))... // itd</span> 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ę