Skocz do zawartości

Kamera w 3D


początkujący

Rekomendowane odpowiedzi

Witam. Od niedawna zacząłem przygodę z 3D. I mam taki problem. Wie ktoś ja obracać kamerą wokół przedmiotu w trzech kierunkach? Jak przybliżać i oddalać? Narazie obroty zrobiłem, że kamera nie chodzi po elipsie, tylko w kwadracie, bazując na zmiennych x, y i z. Ale wtedy kamera chodzi jakby po krawędziach sześcianu, a ja chcę żeby to szło płynnie. A z oddalanie i przybliżaniem to już w ogóle nie wiem. Podpowie mi któś? :D

Odnośnik do komentarza
Udostępnij na innych stronach

Witam. Od niedawna zacząłem przygodę z 3D. I mam taki problem. Wie ktoś ja obracać kamerą wokół przedmiotu w trzech kierunkach? Jak przybliżać i oddalać? Narazie obroty zrobiłem, że kamera nie chodzi po elipsie, tylko w kwadracie, bazując na zmiennych x, y i z. Ale wtedy kamera chodzi jakby po krawędziach sześcianu, a ja chcę żeby to szło płynnie. A z oddalanie i przybliżaniem to już w ogóle nie wiem. Podpowie mi któś? :D

 

display_w=display_get_width()/2;
display_h=display_get_height()/3;


change_x=(display_mouse_get_x()-display_w);
change_y=(display_mouse_get_y()-display_h);


player.direction-=change_x/46;
zd+=change_y/80;


if zd<10 zd=10;
else if zd>60 zd=60;

else if zd>89 && ile>40 zd=89;


display_mouse_set(display_w,display_h);

 

? :sp_ike:

Odnośnik do komentarza
Udostępnij na innych stronach

obj_camera:

Create:

z=przedmiot.z // pozycja Z taka jak przedmiotu
len=128 // odleglosc
alpha=0 // kat nachylenia alpha
beta=0 // kat nachylenia beta

Draw:

temp_x=lengthdir_x(len*cos(degtorad(beta)),alpha)
temp_y=lengthdir_y(len*cos(degtorad(beta)),alpha)
temp_z=len*cos(degtorad(beta))
d3d_set_projection(temp_x,temp_y,temp_z,x,y,z,0,0,1)

Powinno dzialac (nie wiem bo nie mam gm przy sobie).

Aby sie obracalo, to zmieniaj wartosci alpha (kat poziomy) i beta (kat pionowy), a do zmiany odleglosci to zmieniaj len.

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm... coś nie wyszło :D. Bo tak: jeżeli skopiuję kod dokładnie, to nic nie widzę prócz tła (pewnie patrzę na krawędź roomu), a jeżeli zmienię wartości d3d_projection (z x_from na x_to itd...) to wtedy wyskakuje błąd, że nie rozpoznaje zmiennej len (mimo iż jest ona w Create). Głównie chodzi mi narazie o oddalanie/przybliżanie, dlatego zacząłem sprawdzać od odległości, a jak nie wyszło, to przestałem sprawdzać. Tak więc dzięki za dobre chęci, ale coś chyba nie wyszło :D . A teraz sprawdzę, czy działało by to gdyby przy moim d3d_projection dodałem "length*cos".

 

EDIT@ to nie był dobry pomysł, obraz zaczął skakać, jeżeli zmieniłem wartości x i y to się przybliżało (ale skacząc (do przodu i do tyłu )) a jak zmieniałem z to tak samo ale w pionie. :blink:

Odnośnik do komentarza
Udostępnij na innych stronach

Juz wiem gdzie mialem blad:

temp_x=lengthdir_x(len*cos(degtorad(beta)),alpha)
temp_y=lengthdir_y(len*cos(degtorad(beta)),alpha)
temp_z=len*cos(degtorad(beta))
d3d_set_projection(x+temp_x,y+temp_y,z+temp_z,x,y,z,0,0,1)

 

Wazne!!! obj_camera MUSI byc pierwsza instancja w roomie, inaczej moga byc bledy (nawet z optymalizacja)

Odnośnik do komentarza
Udostępnij na innych stronach

Wszystko działa... ale nie do końca; coś jest ze zmienną 'beta'. Jak zmieniam zmienną, to tak jakby nie zmieniała się 'beta' tylko 'len'. Przybliża i oddala mi kamerę (mniej-więcej od 'len' do 'len*-1, coś w rodzaju, jakby tak była grawitacja na obiekcie, na który kamera jest zwrócona i nie byłoby hamowania). Sorry za to że się zbytnio nie wkładam nowych pomysłów w problem, ale dopiero wczoraj wieczorem zacząłem przygodę z 3D tak więc...

 

PS nie mówiłeś, że żeby działało, trzeba dać rozkaz kamerze, by skakała za obiektem, którego się ogląda, ale to już sam wymyśliłem :D :P .

 

EDIT@ Żeby może nie zanudzać... Czy jest taka akcja, żeby obiekt skakał za myszką w 3D? (w 2D było to proste:

x=mouse_x
y=mouse_y

. Tutaj chodzi to jakoś tak... inaczej. Wszystko przekręca. Nawet wiem czemu, ale nie wiem jak to rozwiązać, tak więc pytam się specjalistów :D :D

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