1pietras Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 Witam, Aby podbić kosmos brakuje mi tylko zrobienie komety, czyli particle narysowane na ściance. Póki co mam obrót wokół osi X i Z, czyli zachowuje się jak "Billboard", ścianka jest skierowana w stronę kamery. GML zdir=point_direction(x,y,pl_layout.x,pl_layout.y) xdir=-point_direction(0,z,point_distance(x,y,pl_layout.x,pl_layout.y),pl_layout.z) d3d_transform_set_rotation_x(xdir) d3d_transform_add_rotation_z(zdir-90) d3d_transform_add_translation(x,y,z) d3d_draw_wall(-20,0,-20,20,0,20,tex,1,1) d3d_transform_set_identity() Jednak ta kometa ma swoją prędkość, i trzeba obrócić ściankę o oś Y aby wyglądało na to, że naprawdę leci :P tak mniej więcej wygląda "tex": TEX Jak uda się sam obrót, to potem się przyda ustawienie prędkości samego particla, gdy np. kometa leci prosto w stronę kamery Ktoś potrafi mi w tym pomóc ? Wydaje mi się, że to nie jest zbyt prosta sprawa.... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 1 Maja 2014 Udostępnij Opublikowano 1 Maja 2014 Bawiąc się w obracanie w 3 osiach masz do pokonania bardzo, bardzo trudną do rozwiązania kwestię " ". Niestety aby swobodnie obiekty obracać w 3 osiach potrzebujesz do tego kwaternionów, które pracują w 4 osiach X, Y ,Z ,W a to nie jest w GM wbudowane. To jest wyższa matematyka by takie skrypty napisać. Widziałem parę na yoyogames implementacji tego ale z żadnej nie potrafiłem skorzystać tak czy siak :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
1pietras Opublikowano 2 Maja 2014 Autor Udostępnij Opublikowano 2 Maja 2014 hhhmm.... kwateriony, brzmi niezbyt dobrze :P No ale może znajdzie się jakaś prowizorka ? :D Mam obroty kamery, jeszcze coś typu wektora dla kamery "3Dlenghtdir" Może da się to jakoś wykorzystać ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 2 Maja 2014 Udostępnij Opublikowano 2 Maja 2014 Ja nie mam pomysłu. W unity3d kwaterniony są wbudowane więc takie coś był by pikuś :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
1pietras Opublikowano 3 Maja 2014 Autor Udostępnij Opublikowano 3 Maja 2014 No i odnalazłem ładną prowizorkę ! :D Kometa nie porusza się tylko w stronę ekranu lub odwrotnie, efekt jest niezły :P To pewnie też da się jakoś to zrobić Zdjęcie Może komuś to się przyda, więc zamieszczę kod Zmienne, które się przydają do kamery (pl_layout): GML x_view=window_get_x() y_view=window_get_y() width_view=window_get_width() height_view=window_get_height() xcenter_view=(width_view/2) ycenter_view=(height_view/2) xcord_view=display_mouse_get_x()-x_view ycord_view=display_mouse_get_y()-y_view if mouse_check_button_pressed(mb_right) display_mouse_set(xcenter_view+x_view,ycenter_view+y_view) else if mouse_check_button(mb_right) { y_mov_prev=y_mov x_mov+=xcord_view-xcenter_view y_mov+=ycord_view-ycenter_view } Wektor dla kamery: GML x_ldir=sin(degtorad(-x_mov))*sin(degtorad(y_mov))*70 y_ldir=cos(degtorad(-x_mov))*sin(degtorad(y_mov))*70 z_ldir=cos(degtorad(y_mov))*70 CREATE dla komety: GML ydir=random(360) spd=2 degree=point_direction(0,0,pl_layout.x_ldir,pl_layout.y_ldir) xspd=sin(degtorad(degree))*lengthdir_x(spd,ydir) yspd=cos(degtorad(degree))*lengthdir_x(spd,ydir) zspd=lengthdir_y(spd,ydir) zdir=point_direction(x,y,pl_layout.x,pl_layout.y) No i dosyć zwykły DRAW: GML d3d_set_lighting(false) d3d_transform_set_rotation_x(0) d3d_transform_add_rotation_y(45+ydir) d3d_transform_add_rotation_z(zdir-90) d3d_transform_add_translation(x,y,z) d3d_draw_wall(-20,0,-20,20,0,20,tex,1,1) d3d_transform_set_identity() d3d_set_lighting(true) @HuderLord Dzięki za pomoc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 3 Maja 2014 Udostępnij Opublikowano 3 Maja 2014 @HuderLord Dzięki za pomoc Wat Zamiast wywoływać funkcje degtorad i radtodeg to możesz sobie zrobić 2 stałe i poprostu kąty przez nie mnożyć. d2r 0.017453292519943 r2d 57.2957795130823208 tak jest szybciej czyli dla przykładu: GML xspd=sin(d2r*degree)*lengthdir_x(spd,ydir) yspd=cos(d2r*degree)*lengthdir_x(spd,ydir) 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ę