Skocz do zawartości

Zablokowane Kamerka w 3d. Widok ustabilizowany przed graczem.


kt1117

Rekomendowane odpowiedzi

Do tego wystarczy d3d_set_projection. W tej drugiej funkcji argument "angle" zmienia kąt widzenia (nie wiem jak to nazwać) kamery. Tak jak w szerokokątnym obiektywie, możesz zarejestrować więcej obrazu niż w normalnym.

 

E: kod skopiowany z dokumentacji (tak! wystarczyło zajrzeć!):

GML
d3d_set_projection(x,y,10,

x+cos(direction*pi/180),y-sin(direction*pi/180),10,

0,0,1);

Odnośnik do komentarza
Udostępnij na innych stronach

To powoduje widok z góry, ale jak sobie zmienię na 45, to robi tylko ósemki.

E:Mój kod to:

GML
d3d_set_projection(bohater.x,bohater.y+256,bohater.z+256,bohater.x+cos(bohater.direction*pi/180),bohater.y-sin(bohater.direction*pi/180),bohater.z,0,0,1)

I robi ósemki, czy kółka.

Odnośnik do komentarza
Udostępnij na innych stronach

Chodzi Ci, że skopiowałem kod i nie zmieniłem np. x, na bohater.x? Teraz zmieniłem i kamerka się kręci, ale kamerka jest pod kątem z góry, aktualny kod:

GML
d3d_set_projection(bohater.x,bohater.y,bohater.z+140,bohater.x+cos(bohater.direction*pi/180),bohater.y-sin(bohater.direction*pi/180),bohater.z,0,0,1)

A jak dam:

GML
d3d_set_projection(bohater.x,bohater.y+256,bohater.z+140,bohater.x+cos(bohater.direction*pi/180),bohater.y-sin(bohater.direction*pi/180),bohater.z,0,0,1)

To widok jest dobry, ale kamerka się źle kręci.

E:

Jak dam:

GML
d3d_set_projection(bohater.x+(bohater.direction),bohater.y+256,bohater.z+140,bohater.x+cos(bohater.direction*pi/180),bohater.y-sin(bohater.direction*pi/180),bohater.z,0,0,1)

To widok jest dobry i kręci się w miarę, ale za wolno i w połowie, przeskakuje na początek.

Odnośnik do komentarza
Udostępnij na innych stronach

Są trzy osie - x, y i z.

 

oś x - pozioma,

oś y - pionowa,

oś z - głębokość.

 

mając w funkcji argumenty:

GML
bohater.x,bohater.y,bohater.z,

ustawiamy pozycję dokładnie w miejscu, gdzie aktualnie jest obiekt bohater.

 

Kolejne trzy argumenty pokazują nam, gdzie powinna być skierowana kamerka.

GML
bohater.x+cos(bohater.direction*pi/180),bohater.y-sin(bohater.direction*pi/180),bohater.z

da nam więc pozycję przed bohaterem, na jego wysokości. Kamerka będzie patrzyła przed niego.

 

- - -

 

Podsumowując: niepotrzebne bohater.y+256 daje ci pozycję pod bohaterem (patrząc na niego od góry),

a twoje wcześniejsz bohater.z+256 i bohater.z powodowało spojrzenie znad osi z bohatera na jego z (kamerka pochylona była w dół.

 

- - -

 

Jeśli dasz:

GML
d3d_set_projection(bohater.x,bohater.y,bohater.z,bohater.x+cos(bohater.direction*pi/180),bohater.y-sin(bohater.direction*pi/180),bohater.z,0,0,1)

to kamerka będzie poziomo patrzyłą z miejsca bohatera przed niego.

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli nie da się, żeby kamerka patrzyła na bohatera pod kątem z góry i się obracała? Bo teraz jest niby dobrze, gdyby nie to, że widzę tylko ziemię i bohatera, bo wszystko zasłania. Chyba, żebym dał to ext, i w angle wrzucił jakąś wartość, ale to się znowu będzie knociło.

Odnośnik do komentarza
Udostępnij na innych stronach

Trzeba więc zamienić je kolejnością i plusa na minusa w sinusach i cosinusach.

 

GML
d3d_set_projection(bohater.x-cos(bohater.direction*pi/180),bohater.y+sin(bohater.direction*pi/180),bohater.z+140,bohater.x,bohater.y,bohater.z,0,0,1);

powinno działac, ale nie mam przy sobie GM'a, więc sprawdzić nie mogę.

Odnośnik do komentarza
Udostępnij na innych stronach

To powoduje że widzę wyższe miejsce, lub jest mniejsze, kurczę coś nie tak, a jak zwiększyć kąt? Ostatnio też miałem taki problem, ale w 2d, z lengdirami i go nie rozwiązałem, bo teraz widzę że to musi dodawać, lub odejmować od x, bądź y, w zależności od kierunku, miejsca itd.

Odnośnik do komentarza
Udostępnij na innych stronach

Taki kod:

GML
d3d_set_projection(bohater.x+sin((bohater.direction-90)*pi/180),bohater.y-cos((bohater.direction+90)*pi/180),bohater.z+100,bohater.x,bohater.y,bohater.z+50,0,0,1)

robi to samo, wydaje mi się, że trzeba zrobić tak, by kamera chodziła dookoła większego koła i chyba coś z lenghdirami trzeba pokombinować, ale nie jestem pewien.

E:

Mam taki kod:

GML
d3d_set_projection(bohater.x+ (lengthdir_x(100,bohater.direction-90)),bohater.y-lengthdir_y(100,bohater.direction+90),bohater.z+100,bohater.x,bohater.y,bohater.z+50,0,0,1)

i widok obracanie jest ok, kąt górny jest ok, ale widzę bohatera od prawej.

E: Dzięki Mentoss, dzięki tobie wiem jak działa kamera w Gm, teraz jest wszystko ok, jeśli ktoś chce zobaczyć jaki:

GML
d3d_set_projection(bohater.x+ (lengthdir_x(200,bohater.direction-180)),bohater.y-lengthdir_y(200,bohater.direction),bohater.z+aa,bohater.x,bohater.y,bohater.z+50,0,0,1)

i zamykam temat.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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