Skocz do zawartości

Obrót brył w 3D


Markuz

Rekomendowane odpowiedzi

Witam, jak zrobić obrót brył w 3D? Tzn. wiem już że za pomocą d3d_transform_set_identity z tąd = klik , ale jak tak zrobię to robi się tak samo jak tamtemu gościowi tzn. cały ekran "miga". Jak powrócić do normalnego stanu? hmm?

 

PS. np. chce obrócić ten blok o 30 stopni względem osi x :

GML
d3d_draw_block(x-1,y-2,7,x+1,y+2,2,texture[1],1,1);

 

hmm? Proszę o pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

w tamtym kodzie brakowało "d3d_transform_add_translation(x,y,z)" może pomoże :P

GML
d3d_transform_set_rotation_x(30);

d3d_transform_add_translation(x,y,2)

d3d_draw_block(-1,-2,5,1,2,0,texture[1],1,1);

d3d_transform_set_identity();

co do migotania obrazu to nie wiem nigdy się z nim nie spotkałem

dobrze masz ustawiony projektor (kamerę 3D) ?

Odnośnik do komentarza
Udostępnij na innych stronach

GML
d3d_transform_set_rotation_x( degtorad( 30 ) );

// Draw block

d3d_transform_set_identity();

brak d3d_transform_add_translation(x,y,z) (pozycjonowanie obiektu 3D) łatwo może doprowadzić do popełniania błędów

Nie po to jest ta funkcja by jej nie stosować, poza tym znacznie ułatwia prace w 3D i funkcja degtorad() jest tu zbędna

Odnośnik do komentarza
Udostępnij na innych stronach

Heh nom już działa ale jakiś dziwny ten obrót heh, mianowicie , mam bloczek takiego typu:

GML
d3d_draw_block(x-1,y-2,7,x+1,y+2,2,TX,1,1);

I chciałbym aby się on kołysał "na boki" tzn. tak jakby człowiek który się "wozi" wiecie o co chodzi? heh

Kombinuje na różne sposoby ale nie chodzi ... Proszę o pomoc ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Heh , a mógłbym poprosić o jakiś fragment kodu? Bo ja próbuje i albo obiektu w ogóle nie widać albo na chwile się on "wyłania" po czym znika heh...

Przecież był podany

https://forum.gmclan.org/index.php?showtopi...mp;#entry312512

Nie znam kodu więc ciężko mi powiedzieć co żeś tam namodził

Odnośnik do komentarza
Udostępnij na innych stronach

Oto cały kod:

STEP:

GML
//Przeciwnik sie kołysze

if(global.endata[ID,4] <= 30) {

global.endata[ID,4] += 1;

}

if(global.endata[ID,4] > 30) {

global.endata[ID,4] -= 1;

}

global.endata[iD,4] - to jest rotacja przeciwnika

 

CREATE:

GML
ID = global.lastid;

TX_ID = global.endata[ID,1];

TX = sprite_get_texture(tx_tower,TX_ID);

TX2 = sprite_get_texture(tx_tower,0);

TX3 = sprite_get_texture(spr_object,0);

z = 4;

 

DRAW:

GML
draw_set_alpha(0.3);

d3d_draw_floor(x-5,y-5,1,x+3,y+3,1,TX3,1,1);//Cień gracza

draw_set_alpha(1);

d3d_draw_block(x-2,y-2,7,x+2,y+2,2,TX,1,1); //Tłów

d3d_draw_block(x-1,y-1,8,x+1,y+1,7,TX2,1,1); //Głowa

d3d_draw_block(x-2,y-2,8,x+2,y-3,3,TX2,1,1); //Tarcza

d3d_draw_block(x-4,y+2,6,x+2,y+3,5,TX2,1,1); //Miecz</span>

 

I jeśli możesz powiedz mi jak zrobić aby to wszystko w drawie się obracało.

Odnośnik do komentarza
Udostępnij na innych stronach

@LionX, myślałem że chodzi o natywny Direct3D, a nie ten GMowy ;d

E:

GML (Draw)
d3d_transform_set_rotation_x(global.endata[ID,4]);

d3d_transform_add_translation(x,y,0);

draw_set_alpha(0.3);

d3d_draw_floor(-5,-5,1,+3,+3,1,TX3,1,1);//Cień gracza

draw_set_alpha(1);

d3d_draw_block(-2,-2,7,+2,+2,2,TX,1,1); //Tłów

d3d_draw_block(-1,-1,8,+1,+1,7,TX2,1,1); //Głowa

d3d_draw_block(-2,-2,8,+2,-3,3,TX2,1,1); //Tarcza

d3d_draw_block(-4,+2,6,+2,+3,5,TX2,1,1); //Miecz

d3d_transform_set_identity();

Odnośnik do komentarza
Udostępnij na innych stronach

GML (Draw)
d3d_transform_set_rotation_x(global.endata[ID,4]);

d3d_transform_add_translation(x,y,0);

draw_set_alpha(0.3);

d3d_draw_floor(-5,-5,1,+3,+3,1,TX3,1,1);//Cień gracza

draw_set_alpha(1);

d3d_draw_block(-2,-2,7,+2,+2,2,TX,1,1); //Tłów

d3d_draw_block(-1,-1,8,+1,+1,7,TX2,1,1); //Głowa

d3d_draw_block(-2,-2,8,+2,-3,3,TX2,1,1); //Tarcza

d3d_draw_block(-4,+2,6,+2,+3,5,TX2,1,1); //Miecz

d3d_transform_set_identity();

 

Można by też tak, dzięki czemu jeśli będzie skok, cień nie będzie skakał z nami

 

GML (Draw)
draw_set_alpha(0.3);

d3d_transform_add_translation(x,y,0);

d3d_draw_floor(-5,-5,1, 3,3,1, TX3,1,1);//Cień gracza

d3d_transform_set_identity();

draw_set_alpha(1);

 

d3d_transform_set_rotation_z(global.endata);

d3d_transform_add_translation(x,y,z);

d3d_draw_block(-2,-2,7, 2,2,2, TX,1,1); //Tłów

d3d_draw_block(-1,-1,8, 1,1,7, TX2,1,1); //Głowa

d3d_draw_block(-2,-2,8, 2,-3,3, TX2,1,1); //Tarcza

d3d_draw_block(-4,2,6, 2,3,5, TX2,1,1); //Miecz

d3d_transform_set_identity();

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