Skocz do zawartości

Transformacje obiektu 3D


Rekomendowane odpowiedzi

Dzięki :thumbsup:

 

EDIT

Mimo że mi pomogłeś Nicolas nadal prosze o pomoc, wiem już jak zmieniać kształt obiektu 3d, ale nadal nie wiem jak zrobić by się obracał, zazwyczaj obraca mi się cała mapa. <_<

 

Kurde, zmuszasz mnie abym Ci dał ostrzeżenie. Nie pisz kilku postów pod rząd (używaj opcji edit), ok?

Tymon

Odnośnik do komentarza
Udostępnij na innych stronach

Patrz, masz w manualu przykład:

d3d_transform_set_identity();
d3d_transform_add_rotation_x(90);
d3d_transform_add_translation(100,100,10);
draw_sprite(spr,0,0,0);
d3d_transform_set_identity();

Teraz przerób go:

d3d_transform_set_identity();
d3d_transform_add_rotation_x(direction);
d3d_draw_...
d3d_transform_set_identity();

itd.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Sorka że odswieżam temat, ale mam pewien problem, jeśli w obiekcie w drawie wpisze

d3d_transform_set_identity();

d3d_transform_add_rotation_x(90);

draw_sprite(spr,0,0,0);

d3d_transform_set_identity();

Obiekt obraca się wokół własnej osi, ale także wokół punktu zerowego na planszy, jeśli do kodu dodam

d3d_transform_add_translation(100,100,10);

to obiekt wogóle się nie obraca.

Odnośnik do komentarza
Udostępnij na innych stronach

d3d_transform_set_identity();
d3d_transform_add_rotation_x(90);
draw_sprite(spr,0,0,0);
d3d_transform_set_identity();

 

pisząc :

d3d_transform_add_rotation_x(direction);
direction=90;

piszesz aby obiekt obrócił się o 90 stopni na osi x i na tym koniec :P

 

a pisząc:

d3d_transform_add_rotation_x(direction);
direction+=1;

piszesz aby obiekt obracał się o 1 stopien po osi x.

 

O to Ci chodziło :P ??

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, chyba coś robie źle, to cały kod;

 

d3d_transform_set_identity();
d3d_transform_set_rotation_z(direction);
direction +=1;


var tex;
tex = background_get_texture(tanktex1);
d3d_draw_block(x-10,y-7,wysokz +6,x+10,y+7,wysokz +2,tex,1,1);
d3d_draw_block(x-11,y-8,0,x+11,y+8,0,cien,1,1);
tex = background_get_texture(tanktex3);
d3d_draw_block(x-10,y-6,wysokz +9,x+9,y+6,wysokz +6,tex,1,1);
d3d_draw_block(x-6,y-4,wysokz +13,x+3,y+4,wysokz +9,tanktex3,1,1);
d3d_draw_block(x+3,y-1,wysokz +12,x+8,y+1,wysokz +11,tanktex4,1,1);
d3d_transform_set_identity();

 

Ten fragment kodu działa poprawnie

var tex;
tex = background_get_texture(tanktex1);
d3d_draw_block(x-10,y-7,wysokz +6,x+10,y+7,wysokz +2,tex,1,1);
d3d_draw_block(x-11,y-8,0,x+11,y+8,0,cien,1,1);
tex = background_get_texture(tanktex3);
d3d_draw_block(x-10,y-6,wysokz +9,x+9,y+6,wysokz +6,tex,1,1);
d3d_draw_block(x-6,y-4,wysokz +13,x+3,y+4,wysokz +9,tanktex3,1,1);
d3d_draw_block(x+3,y-1,wysokz +12,x+8,y+1,wysokz +11,tanktex4,1,1);

Jest on wyświetlany poprawnie

tank.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

Pisałem wyżej

var tex;
tex = background_get_texture(tanktex1);
d3d_draw_block(x-10,y-7,wysokz +6,x+10,y+7,wysokz +2,tex,1,1);
d3d_draw_block(x-11,y-8,0,x+11,y+8,0,cien,1,1);
tex = background_get_texture(tanktex3);
d3d_draw_block(x-10,y-6,wysokz +9,x+9,y+6,wysokz +6,tex,1,1);
d3d_draw_block(x-6,y-4,wysokz +13,x+3,y+4,wysokz +9,tanktex3,1,1);
d3d_draw_block(x+3,y-1,wysokz +12,x+8,y+1,wysokz +11,tanktex4,1,1);

 

Wygląda jak piramida? (Nic dziwnego, wkońcu jest tu tylko 5 prostokątów)

Odnośnik do komentarza
Udostępnij na innych stronach

Masz no:

d3d_transform_set_identity();

d3d_transform_add_rotation_z(direction);
d3d_transform_add_translation(x,y,wysokz);

var tex;
tex=background_get_texture(tanktex1);
d3d_draw_block(-10,-7,wysokz+6,10,7,wysokz+2,tex,1,1);
d3d_draw_block(-11,-8,0,11,8,0,cien,1,1);

tex=background_get_texture(tanktex3);
d3d_draw_block(-10,-6,wysokz+9,9,6,wysokz+6,tex,1,1);
d3d_draw_block(-6,-4,wysokz+13,3,4,wysokz+9,tanktex3,1,1);
d3d_draw_block(3,-1,wysokz+12,8,1,wysokz+11,tanktex4,1,1);

d3d_transform_set_identity();

Powinno działać.

Odnośnik do komentarza
Udostępnij na innych stronach

To teraz trochę głupiego tłumaczenia.

 

d3d_transform_set_identity();

Usuwa wszystkie transformacje :)

d3d_transform_add_rotation_z(dir);

Dodaje obrót na osi z.

d3d_transform_add_translation(x,y,z);

Ustawia pozycję w której ma być rysowany czołg etc.

 

Liczę że zrozumiesz.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 miesiące temu...

Najlepiej jest napisać sobie funkcję transformSet:

d3d_transform_set_identity();
d3d_transform_add_rotation_axis( argument[3], argument[4], argument[5], 0 );
d3d_transform_add_rotation_x( argument[6] );
d3d_transform_add_rotation_y( argument[7] );
d3d_transform_add_rotation_z( argument[8] );
d3d_transform_add_translation( argument[0], argument[1], argument[2] );

I używasz:

transformSet( x, y, z, rotx, roty, rotz, dirx, diry, dirz );
d3d_draw_block( 1, 1, 1, -1, -1, -1, 0, 1, 1 );
d3d_transform_set_identity();

Dobrze jest dawać po każdym rysowaniu d3d_transform_set_identity bo czasami są problemy z kamerą.

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ę...