Skocz do zawartości

100 pytań odnośnie 3d


Rekomendowane odpowiedzi

W 3d bawię się od wczoraj i jestem w nim całkowicie zielony, więc raczej często będę zadawał jakieś banalne i bezsensowne pytania w tym temacie, żeby nie zaśmiecać całego forum.

Więc pierwsze 2 pytania:

1)Jak zrobić, aby pocisk jako oddzielny obiekt leciał nie tylko w stronę w którą postać jest odwrócona(N/S/W/E) ale także góra/dół.

Mam taki kod jeśli chodzi o kamerę(jeśli to pomoże):

GML
//create

pitch=0;

global.camsin = sin(direction*pi/180);

global.camcos = cos(direction*pi/180);

z=20;

pitch=0;

 

//step

direction -= (display_mouse_get_x() -display_get_width()/2)/10;

pitch += (display_mouse_get_y() -display_get_height()/2)/10;

pitch = max(min(pitch,100),-100);

display_mouse_set(display_get_width()/2,display_get_height()/2);

 

//end step

global.camsin = sin(direction*pi/180);

global.camcos = cos(direction*pi/180);

 

//draw

d3d_set_projection(x,y,z,x+cos(direction*pi/180),y-sin(direction*pi/180),z-sin(pitch*pi/180),0,0,1);

 

Jeśli chodzi o pocisk, to jest to po prostu pokazywanie go w 3d, direction gracza + speed. Nic więcej.

 

2)Jak zrobić grubsze tekstury? Chodzi mi o to, że jak mam kod:

GML
d3d_draw_wall(x1,y1,z1,x2,y2,z2,tex,1,1);

To ściany są cieniutkie i brzydko się prezentują z boku.

Odnośnik do komentarza
Udostępnij na innych stronach

Z tego co widzę to masz już zrobione rozglądanie się w górę i w dół.

Zmienna pitch to kąt pod jakim postać patrzy w pionie. Możesz dzięki niej dodać pociskowi wektor który będzie przemieszczać za pomocą tego kąta pocisk w górę/dół.

 

Tam gdzie masz strzelanie ( kod gdzie tworzysz pocisk instance_create() ) zmodyfikuj tak:

 

GML
pocisk = instance_create( nawias uzupełnij );

pocisk.Zspeed = sin(pitch*pi/180);

 

i w Step pocisku:

GML
z += Zspeed;

To powinno zadziałać.

 

Po za tym jak chciałbyś się bawić w optymalizację ( a w przypadku trybu 3D w GM który jest wolny, wypadało by ) to wszystkie pi/180 możesz zastąpić stałą która będzie wynosić pi/180 ( stałe w GM definujesz w tabeli pod shift+crtl+N )

 

pogrubione jest zbędne

pitch=0;

global.camsin = sin(direction*pi/180);

global.camcos = cos(direction*pi/180);

z=20;

pitch=0;

Odnośnik do komentarza
Udostępnij na innych stronach

Dalej jest, że tylko na boki, z tym, że wcześniej był zwrócony cały czas przodem do postaci, a teraz w zależności jak jest obrocona początkowo kamera(znaczy przy tworzeniu pocisku), to pocisk jest zwrócony albo przodem, albo pod ukosem, albo bokiem całkiem.

Odnośnik do komentarza
Udostępnij na innych stronach

Draw text działa ale musisz zrobić sobie osobny obiekt który będzie ci robił za hud.

Obiekt taki musi mieć najmniejszy depth by nic go nie przysłaniało.

jego Draw:

GML
// HUD ----------------------------------------------------------------------------------------------

d3d_set_lighting( false );

d3d_set_hidden( false );

d3d_set_projection_ortho( 0, 0, view_wview, view_hview, 0 );

draw_set_color( $FFFFFF );

draw_text( view_xview + 10, view_yview + 10, string(fps) );

d3d_set_lighting( true);

d3d_set_hidden( true );

Oczywiście d3d_set_lighting( ); ustawiasz tylko wtedy jak ze świateł korzystasz

 

To działa tak że na tą chwilę tryb kamery 3D jest wyłączana i włączana jest kamera 2D i rysowane są rzeczy na ekranie po czym wszystko znowu się przestawia na 3D

Odnośnik do komentarza
Udostępnij na innych stronach

Gdy mam tak:

GML
d3d_set_hidden( false );

d3d_set_projection_ortho( 0, 0, view_wview, view_hview, 0 );

draw_text( view_xview + 10, view_yview + 10, string(fps) );

d3d_set_hidden( true );

To jest coś zbugowane, bo tak pokazuje:

bug1dy.png

a jak tak:

GML
d3d_set_hidden( false );

draw_set_color( $FFFFFF );

draw_text( view_xview + 10, view_yview + 10, string(fps) );

d3d_set_hidden( true );

To nie pokazują się napisy.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja się nie znam ale po 1

 

po co wam w ogóle to

d3d_set_hidden( false );

to nie wiem plus czy czasem nie powinno być odwrotnie jak już?

 

Z tego co wiem ale mogę się mylić d3d_set_hidden( true ); sprawia że obiekty zasłonięta innymi obiektami będą przerznie widoczne, chyba jedyne zastosowanie ich wdziałem albo w backgroundzie albo w partyclach nie pamiętam

 

ja to bym pokasował i po prostu tam gdzie mam kamerę orte daj depth na -1000

 

 

edit:

Jak za pomocą d3d_draw_block lub wall rysować z pozycji 0,0,0? :D

jak chcesz coś narysować w pozycji 0,0,0

 

urzywasz tego co ci HuderLord napisał czyli np

 

GML
d3d_transform_set_translation(0, 0, 0);//pozycja obieltu

d3d_draw_block(i tu wielkość obiektu

tu też zależny czy chcesz mieć origin point na środku czy z innej strony

czyli np.

 

origin na środku obiektu

d3d_draw_block( -8, -8, -8, 8, 8, 8 ... )

 

lub origin na środku w szerokości na dole w wysokości i na początku w długości

d3d_draw_block( 0, -8, 0, 8, 8, 8 ... )

 

itp

d3d_draw_block( 0, 0, 0, 8, 8, 8 ... )

 

[color="#FF0000"]d3d_transform_set_identity();// ważne by zawsze po użyciu jakiejkolwiek funkcji transform użyć d3d_transform_set_identity() by funkcja transform nie wpłynęła na działanie innych obiektów 3D[/color]</span>

Odnośnik do komentarza
Udostępnij na innych stronach

To włącza i wyłącza sortowanie depth 3D obiektów. Ale czy faktycznie trzeba to wyłączać przy przechodzeniu w kamerę 2D to w sumie nie wiem. Przeglądając forum yoyogames widziałem że tak ludzie zawsze robią. U mnie nigdy to nic nie dawało.

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