początkujący Opublikowano 6 Października 2007 Udostępnij Opublikowano 6 Października 2007 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 Więcej opcji udostępniania...
KoRn Opublikowano 6 Października 2007 Udostępnij Opublikowano 6 Października 2007 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 Więcej opcji udostępniania...
początkujący Opublikowano 6 Października 2007 Autor Udostępnij Opublikowano 6 Października 2007 No tak, ale... co jest do czego i gdzie to umieścić? :D Tzn. który kod jest do obrotu osi x, który do y, który do z a który odpowiada za przybliżanie/oddalanie, i w jakich eventach to umieścić? :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 6 Października 2007 Udostępnij Opublikowano 6 Października 2007 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 Więcej opcji udostępniania...
początkujący Opublikowano 6 Października 2007 Autor Udostępnij Opublikowano 6 Października 2007 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 Więcej opcji udostępniania...
PsichiX Opublikowano 6 Października 2007 Udostępnij Opublikowano 6 Października 2007 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 Więcej opcji udostępniania...
początkujący Opublikowano 6 Października 2007 Autor Udostępnij Opublikowano 6 Października 2007 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę