Jestem nowy w programowaniu i programowaniu gier. Czytałem już coś o wektorach i matematyce, ale mam pytanie - gdzie używać wektorów w programowaniu gier? Może ktoś może podać prosty przykład, w którym używasz wektorów (w 2D)?
Znalazłem przykłady, ale głównie znajdują się w konsoli, gdzie wypisują liczby i duże przykłady, których nie rozumiem.
class Star
tutajPoint2D
używany wclass ResizeRectangle
Odpowiedzi:
Co to są wektory?
Wektory to zbiory współrzędnych o różnych wymiarach. Każda współrzędna w wektorze reprezentuje jakąś absolutną pozycję w tym kierunku przestrzeni, w której znajduje się wektor.
Zauważ, że we wszystkich przypadkach przypisaliśmy znaczenie wektorom dla naszego problemu. Podczas gdy w grach często używane są wektory do geometrii, nie ma powodu, dla którego nie można zrobić z nimi nic innego.
Dlaczego używam wektorów?
Po pierwsze, nigdy nie musisz używać wektorów. Tak długo, jak śledzisz xiy, lub dowolne współrzędne, na których ci zależy, w jakiś sposób wszystko jest w porządku.
Zaletą stosowania wektorów jest jednak to, że starannie reprezentują takie rzeczy, jak kierunek i pozycja, a także mają zdefiniowane kilka operacji matematycznych, które ułatwiają życie.
Prostym przykładem tego jest produkt punktowy .
Załóżmy, że masz system radarowy w grze typu top-down. Każdy wróg pojawiający się w sektorze radaru (jakiś klin w kształcie kulek w 2D) powinien otrzymać na ekranie małą czerwoną kropkę. Musisz więc dowiedzieć się, którzy wrogowie są w twojej sekcji radaru.
Możesz sprawdzić, czy wrogowie znajdują się w trójkącie. Możesz także sprawdzić, czy wrogowie znajdują się na przecięciu dwóch półprzestrzeni płaszczyzn / linii definiujących dwie strony sektora radaru.
Lub możesz po prostu użyć produktu kropkowego do sprawdzenia. Oto jak:
Jest to bardzo przydatne, a także pozwala teraz łatwo mieć radary, które wskazują w różnych kierunkach (wystarczy zmienić wektor do przodu) i mają różne szerokości (wystarczy zmienić kąt szerokości radaru) - i można ponownie użyć tego samego kodu również w tych przypadkach !
Dlaczego jeszcze używam wektorów?
Jeśli jesteś w 2D, być może najlepszym sposobem na uzyskanie złożonych efektów i ruchów (wirowanie, skalowanie itp.) Jest użycie wykresu sceny. Planeta ma orbitujący statek, statek ma orbitującego drona. Obliczenia tego bez użycia matematyki wektorowej są naprawdę brzydkie.
W przypadku matematyki wektorowej każdy z nich reprezentuje macierz punktową i macierz transformacji 3x3. Planeta używa swojej transformacji, statek używa swojej transformacji i transformacji planety, a dron używa transformacji i transformacji statku i transformacji planety.
Gdy planeta się porusza, zmieniasz jej transformację, a statek i dron automatycznie ustawiają się „za darmo”. Znacznie czystszy kod.
Nadal nie jestem przekonany. Wektory są również natywną reprezentacją pozycji, geometrii i ruchu używaną przez prawie wszystkie biblioteki graficzne - a na pewno OpenGL i DirectX. Prawdopodobnie nie uciekniesz bez konieczności korzystania z nich.
Wnioski Wektory są potężnym narzędziem do pisania przejrzystego kodu, który rozwiązuje problemy geometryczne w sposób czysty i elegancki.
źródło
Przykładem 2D są współrzędne ekranu, które identyfikują piksel na ekranie i mają składową x i y [x, y], tj. Lewą górną pozycję ekranu [0, 0]
Kolejny przykład: wyobraź sobie przewijanie tekstu od prawej krawędzi ekranu do lewej krawędzi ekranu. Teraz musisz zdefiniować prędkość przewijanego tekstu w pikselach na sekundę, tj. [-20, 0], co oznacza, że tekst przewija się o 20 pikseli w lewo na sekundę i nigdy nie zmienia wysokości.
Kolejny bardziej zaawansowany przykład: wyobraź sobie grę 2D, która ma działać na różnych rozdzielczościach ekranu 800 x 600, 1024 x 768 itd. Można to łatwo zrobić wewnętrznie, używając szerokości ekranu od 0,0 do 1,0 i wysokości od 0,0 do 1,0, aby oddzielić logikę gry od rzeczywistej rozdzielczości ekranu. Teraz, gdy rysujesz na ekranie, po prostu mnożymy wektor wewnętrzny przez wektor rozdzielczości:
zauważ, że wszystkie 3 zmienne są tutaj wektorami 2D, mają one składową x i y, tj. dla tego wewnętrznego_pos [0,5, 0,25]:
Tak więc pozycja wewnętrzna [0,5, 0,25] jest przekształcana na rzeczywistą pozycję ekranu [400, 150]
To była podstawowa rzecz. Prawdziwą zaletą wektorów jest aplikacja w Algebrze liniowej, w której można używać macierzy do przekształcania wierzchołków (obracanie, skalowanie, lustro itp.), Tj. Do łatwego obracania całej pozycji wewnętrznej o 90 stopni, lub trzeba zamienić ekran-y pozycja 0 od góry do dołu ekranu, ponieważ np. używana przez ciebie biblioteka strony trzeciej korzysta z tej konwencji.
źródło
screen_pos = internal_pos * screen_resolution
jest niezmienna współrzędna w sposób, w jaki została napisana, może być bardziej odpowiednio napisana , gdzie jest odwzorowanie liniowe (które można zapisać jako macierz, w tym przypadku przekątną).screen_pos = map_to_screen * internal_pos
map_to_screen
Oto świetne wyjaśnienie wektorów w rozwoju gier na blogu Wolfire Games:
http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/
źródło
Wektor jest bytem, który ma zarówno wartość, jak i kierunek. Przykłady wektorów w świecie rzeczywistym i gry oparte na fizyce obejmują prędkość i pęd. Właściwości, które mają tylko wartości, ale nie mają kierunku, nazywane są skalarami i obejmują lokalizację, masę, gęstość i tak dalej.
Wektory są potrzebne do gier, które emulują właściwości fizyczne, które są podobne do wektorów (jak wspomniano - prędkość, przyspieszenie i tak dalej). Matematyka używana do obliczeń wektorowych nazywa się algebrą liniową .
źródło
Gdziekolwiek masz liczbę dla każdego wymiaru reprezentującą coś, zbiór tych liczb można uznać za wektor. Położenie, prędkość i przyspieszenie są głównymi przykładami wektorów. W niektórych przypadkach praktyczne może być również przedstawienie kierunku zwrócenia jako wektora.
W przypadku podstawowych rzeczy tak naprawdę nie ma znaczenia, czy uważasz te liczby za wektory, ale jeśli chcesz robić jakąkolwiek fizykę, powinieneś przyjrzeć się matematyce wektorowej.
źródło
Po prostu cokolwiek z pozycją lub kierunkiem, które jest wszędzie w grze, używają wektorów. Wektor jest jak punkt
Jednak różnica naprawdę sprowadza się do tego. Punkt jest tylko kropką, podczas gdy wektor jest strzałą.
Jeśli masz
twoje powiedzenie, że mam na myśli w tej lokalizacji x 5 i y 10.
jednak kiedy deklarujesz wektor ...
Naprawdę mówisz, że deklaruję strzałkę od 0,0 do x 5, y 10;
możesz nawet mieć punkt, z którego wektor jest skierowany z dowolnego miejsca w przestrzeni, na przykład użyjmy punktu i wektora, aby przesunąć nasz obiekt, użyjemy Point2 do przechowywania jego położenia i wektora2, aby go przenieść .
teraz możesz użyć wektora, aby przesunąć ten punkt, powiedzmy, że chcemy przesunąć ten punkt w górę o oś x jednostek, więc masz
teraz punkt przesunął się tam, gdzie kazała to twoja strzała wektorowa.
Chodzi teraz o to
Ostatnią rzeczą, na którą należy zwrócić uwagę, jest to, że wektor jest używany jako punkt i na odwrót tylko dlatego, że przechowują ten sam typ danych.
źródło
v = pos - origin
takv != pos
ponieważ pochodzenie jest punktem{0, 0, 0, 1}