Poruszanie kamerą (lub innym obiektem) po danym wektorze

Odpowiedz Nowy wątek
2011-07-27 14:41
0

Witam! Piszę klasę związaną z kamerą w XNA. Chciałbym zrobić oddalanie i przybliżanie kamery, która patrzy na jakiś obiekt (punkt), przypuścmy Vector3.Zero. Jak mam zaimplementować poruszanie po tym wektorze czyli dajmy na to pozycja kamery = 10, 10, 10; patrzy na punkt 0, 0, 0 - czyli jest tu określony wektor 3D, jak się po nim poruszać, tzn. tą kamerą czy obiektem? Wykorzystam to pewnie potem np. w kierunku jazdy samochodem. Pomóżcie! :P


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-07-27 17:04
O_o
0

Taki szybki pomysł:

Masz dwa punkty, pomiędzy nimi odcinek. Zmodyfikuj twierdzenie Talesa tak by działało w 3D i wtedy łatwo przesuniesz o dany procent odcinka.
Wyjdzie coś na styl:

Start.X+=(End.X-Start.X)*percentage;
Start.Y+=(End.Y-Start.Y)*percentage;
Start.Z+=(End.Z-Start.Z)*percentage;

O̾..͠o

Pozostało 580 znaków

2011-07-27 18:59
0

mnożenie i dzielenie wektorów :)

            DELETE

Do tego użyłem dzielenia wektorów :)

Mój jest w połowie dobry bo jeżeli chciałbyś oddalić to zamiast dzielić trzeba pomnożyć


Przejdę, przejdę, myślał Red. Nie pierwszy raz, przecież przez całe życie właśnie tak, po szyję w gównie, a nad głową pioruny, zawsze tak było...
edytowany 4x, ostatnio: konserwa, 2011-07-28 12:03

Pozostało 580 znaków

2011-08-09 14:08

Miałem przerwę i teraz spróbowałem coś zrobić. Wymyśliłem takie coś:

        public void ZoomIn(float value)
        {
            Camera Normalized = this.Clone() as Camera;
            Vector3 Vector = Normalized.LookAt - Normalized.Position;
            Vector.Normalize();
            position += Vector * value;
 
        }

I nic z tego, bo kamera jedzie, ale nie po wektorze "patrzenia". Co zrobiłem źle?


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-08-09 15:01
0
    public void ZoomIn(float value)
        {
            Camera Normalized = this.Clone() as Camera;
            Vector3 Vector = Normalized.LookAt - Normalized.Position;
            Vector.Normalize();
            Normalized.position -= Vector * value;
 
        }

Przejdę, przejdę, myślał Red. Nie pierwszy raz, przecież przez całe życie właśnie tak, po szyję w gównie, a nad głową pioruny, zawsze tak było...
edytowany 1x, ostatnio: konserwa, 2011-08-09 15:02

Pozostało 580 znaków

2011-08-09 15:19
0

WTF?! Przecież to jest prawie to samo, a poza tym Normalized jest kopią nie?


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-08-09 15:58
0

Swego czasu napisałem taką klasę, która pomagała mi w "zarządzaniu" kamerą w DirectX. Po pewnych przeróbkach zadziała pewnie z XNA. Slide działa do przodu i do tyłu, natomiast na boki i w górę/dół chyba nie dokończyłem...
http://wklej.to/jpeed

Legenda(?):
Forward - ruch w przód
Sideways - na boki (nie wiem dokładnie, w który bok dla +)
Upward - w górę (w górę i chyba nie działa :P )

hTheta i vTheta to to samo co hAngle (dosłownie kąt horyzontalny) i vAngle (kąt wertykalny) tyle, że w radianach. W sumie nie wiem po co tak to śmiesznie zrobiłem, ale już zostało.

moveDist - to coś w rodzaju czułości, jakby jednostka
radius - to promień "abstrakcyjnej" kuli, która służy do obliczenia lookAt


Some people see things as they are, and say "why?". I dream things that never were and say "why not?".
edytowany 1x, ostatnio: Wronq, 2011-08-09 20:32

Pozostało 580 znaków

2011-08-09 18:00
0

a co masz na myśli ze źle leci że zamiast przybliża oddala czy co ?


Przejdę, przejdę, myślał Red. Nie pierwszy raz, przecież przez całe życie właśnie tak, po szyję w gównie, a nad głową pioruny, zawsze tak było...

Pozostało 580 znaków

2011-08-09 18:32
0

Tak na oko to się porusza wektorem Y (góra/dół). A powinien oddalać/przybliżać nie? LookAt mam (0,0,0) a kamera (5,5,5). Wektor po Normalize otrzymuje jakoś (0.534, 0.534, 0.534) a value próbowałem różnie i 0.005 i 0.5 i do samo - góra, dół. :(

Tak myślę, ale nie wiem czy to prawda, ale kamera się przybliża/oddala, ale po wektorze pozycji kamery czyli 5,5,5 ??


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>
edytowany 1x, ostatnio: xeo545x39, 2011-08-09 19:26

Pozostało 580 znaków

2011-08-09 20:01
0

Pokarz klase camera

I zamień tam += na -= tak powinno byc.

Mówienie nam że normalize wynosi 0.5 nic nam nie mówi. Chyba ze wyszło by więcej niż 1.


Przejdę, przejdę, myślał Red. Nie pierwszy raz, przecież przez całe życie właśnie tak, po szyję w gównie, a nad głową pioruny, zawsze tak było...
edytowany 1x, ostatnio: konserwa, 2011-08-09 20:10

Pozostało 580 znaków

2011-08-09 20:03
0

Ale zamiana nic nie daje, bo pod strzałkami mam + i - odpowiednio przybliżanie i oddalanie, więc tylko zmieni to, że będzie się poruszało do góry lub do dołu, a nie po wektorze patrzenia kamery ;/

**Problem rozwiązany.**


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>
edytowany 1x, ostatnio: xeo545x39, 2011-08-09 20:44
W ogóle spojrzałeś na ten plik, który podesłałem? Może tam coś znajdziesz? - Wronq 2011-08-09 20:17
Bo przeoczyłem twojego posta, sorry :) BTW. W MathHelper są funkcje typu DegreesToRadians. Nie musiałem pisać sam. - xeo545x39 2011-08-09 20:20
Na coś takiego to nawet szkoda czasu było szukać :D Ale dzięki, na przyszłość się przyda. - Wronq 2011-08-09 20:23
Te twoje metody troszkę skomplikowane, mógłbyś wytłumaczyć co to są: vTheta, hTheta, Sideways? - xeo545x39 2011-08-09 20:24

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0