Skocz do zawartości

D3D_draw_block TRANSFORM


Ice Cube

Rekomendowane odpowiedzi

Bawie sie w 3d,to moje poczatki,czytam wasze kursy,przegladam forum,cwicze na prostych przykladach

ale mam pytanko jak sprawic,żeby 3d block krecił sie wokół włąsnej osi

domyslam sie,że służy do tego d3d_Transform,ale czy moglby mi ktos to pokolei bardzo prosto wyjasnic?

 

mam juz swoja plansze,mam figure 3d block:

d3d_draw_block(x-128,y-128,155,x+128,y+128,0,background_get_texture(bck_blok),1,1)

 

co zrobic by krecił sie wokół własnej osi?

 

pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

GML
d3d_transform_set_rotation_z(angle);

d3d_transform_add_translation(x, y, z);

d3d_draw_block(x-128,y-128,155,x+128,y+128,0,background_get_texture(bck_blok),1,1);

d3d_transform_set_identity();

 

Zwróć uwagę że pierwszy jest SET kolejny ADD. No i kolejność jest ważna. Najpierw skalowanie (tutaj nie ma akurat) potem obracanie potem przesuwanie.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
d3d_transform_set_rotation_z(angle);

d3d_transform_add_translation(x, y, z);

d3d_draw_block(x-128,y-128,155,x+128,y+128,0,background_get_texture(bck_blok),1,1);

d3d_transform_set_identity();

 

Zwróć uwagę że pierwszy jest SET kolejny ADD. No i kolejność jest ważna. Najpierw skalowanie (tutaj nie ma akurat) potem obracanie potem przesuwanie.

 

 

error

 

unknown variable angle

Odnośnik do komentarza
Udostępnij na innych stronach

No bo tam miałeś podstawić twój kąt obrotu. Lub zmienną za pomocą której chcesz ten obiekt obracać.

 

Chyba brakuje ci podstaw, czym są funkcje czym zmienne. Sądząc po pytaniu z poprzedniego tematu widać że nie umiesz odróżnić zmiennej od funkcji wbudowanej. "d3d_transform_add_rotation_x=45;" tutaj przypisałeś wartość 45 do zmiennej o nazwie "d3d_transform_add_rotation_x" zamiast użyć funkcji o nazwie d3d_transform_add_rotation_x(),

funkcje mają okrągłe nawiasy na końcu. W nawiasie się wstawia argumenty (parametry) które te funkcje wymagają. W tej konkretnej trzeba podać kąt obrotu wyrażony w stopniach.

Odnośnik do komentarza
Udostępnij na innych stronach

No bo tam miałeś podstawić twój kąt obrotu. Lub zmienną za pomocą której chcesz ten obiekt obracać.

 

Chyba brakuje ci podstaw, czym są funkcje czym zmienne. Sądząc po pytaniu z poprzedniego tematu widać że nie umiesz odróżnić zmiennej od funkcji wbudowanej. "d3d_transform_add_rotation_x=45;" tutaj przypisałeś wartość 45 do zmiennej o nazwie "d3d_transform_add_rotation_x" zamiast użyć funkcji o nazwie d3d_transform_add_rotation_x(),

funkcje mają okrągłe nawiasy na końcu. W nawiasie się wstawia argumenty (parametry) które te funkcje wymagają. W tej konkretnej trzeba podać kąt obrotu wyrażony w stopniach.

 

 

ok dzieki za rady znowu sie czegos nauczyłem ;)

mam takie cos:

 

d3d_transform_add_rotation_z(q)

d3d_transform_add_translation(1,1 ,0);

d3d_draw_block(x-128,y-128,155,x+128,y+128,0,background_get_texture(bck_blok),1,1);

d3d_transform_set_identity();

 

 

obiekt kreci sie dzieki zmiennej q,ale nie wokół własnej osi,tylko wokół mojej :(

 

co zrobic by sie krecil wokol wlasnej?

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

może inaczej jezeli umieszcze obiekt w roomie na wspolrzednych x=0,y=0 to obiekt kreci sie wokół wlasnej osi

ale jak umieszcze obiekt gdzies dalej np x=1000,y=1000 to obiekt lata po calej planszy zamiast krecic sie wokół własnej osi,to kreci sie jakby wokół x=0,y=0

 

;/

Odnośnik do komentarza
Udostępnij na innych stronach

Zwróć uwagę że pierwszy jest SET kolejny ADD

 

Aha nie zauwazyłem co wpisałeś w linice d3d_draw_block(x-128,y-128,155,x+128,y+128,0,background_get_texture(bck_blok),1,1); tutaj jest źle.

 

 

Jak używasz transformów do przesuwania obiektów to w funkcjach rysujących dany model współrzędne ustawiaj bez zmiennych pozycji x, y, z. Te wsadza się do translate.

czyli całość powinna być tak:

 

GML
d3d_transform_set_rotation_z(angle);

d3d_transform_add_translation(x, y, 0);

d3d_draw_block(-128,-128,155,128,128,0,background_get_texture(bck_blok),1,1);

d3d_transform_set_identity();

Odnośnik do komentarza
Udostępnij na innych stronach

Aha nie zauwazyłem co wpisałeś w linice d3d_draw_block(x-128,y-128,155,x+128,y+128,0,background_get_texture(bck_blok),1,1); tutaj jest źle.

 

 

Jak używasz transformów do przesuwania obiektów to w funkcjach rysujących dany model współrzędne ustawiaj bez zmiennych pozycji x, y, z. Te wsadza się do translate.

czyli całość powinna być tak:

 

GML
d3d_transform_set_rotation_z(angle);

d3d_transform_add_translation(x, y, 0);

d3d_draw_block(-128,-128,155,128,128,0,background_get_texture(bck_blok),1,1);

d3d_transform_set_identity();

 

 

wielkie dzieki jesteś wielki wszystko działa :)

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...