Poruszanie kamerą (lub innym obiektem) po danym wektorze

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

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;
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ć

0

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?

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

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

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

0

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

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 ??

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.

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

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