Jestem początkującym programistą i tworzę projekt, który pozwala mi chodzić po pokojach za pomocą kamery z perspektywy pierwszej osoby. Do tej pory rysowałem i włączałem budynki, ale teraz utknąłem i nie wiem, jak zrobić aparat z perspektywy pierwszej osoby, aby pozwolić mi chodzić.
Czy ktoś mógłby skierować mnie w stronę kamery, której mógłbym użyć, lub jakiegoś przydatnego kodu?
Odpowiedzi:
Oto kilka wskazówek na temat obracania aparatu (podgląd myszy). Po naiwnym wdrożeniu klasy kamery od zera stwierdziłem, że muszę zrobić kilka dodatkowych poprawek, aby uzyskać dobre zachowanie obrotowe:
Zresetuj współrzędne myszy do środka ekranu na każdej klatce, aby mysz nigdy nie została złapana na granicach ekranu
Utrzymaj wektor „w górę” aparatu (nie zezwalaj na przewracanie) i ponownie oblicz wektor „na boki”
Nie zezwalaj na patrzenie w górę poza osią pionową + y lub w dół za osią -y (zbyt daleko w górę / w dół)
Uzyskaj prawidłową kolejność obrotów (najpierw góra / dół, potem lewo / prawo)
Ponownie znormalizuj wektory „góra”, „cel” i „na boki” w każdej ramce
Mamy nadzieję, że wykorzystasz ten kod na swoją korzyść:
Uwaga:
mouseAxisX i mouseAxisY są zdefiniowane jako +/- 1, w zależności od tego, czy chcesz odwrócić widok myszy osi X lub Y. Zwykle gry oferują tę opcję przynajmniej dla osi pionowej.
MIN_UPWARDS_TILT_DEG jest zdefiniowany jako 1,0 stopnia (więc widz może patrzeć od -89 stopni w dół do +89 stopni w górę, co wygląda całkiem przekonująco jak pełny zakres 180 stopni w pionie - brakujące 2 stopnie na krańcach są dość nieistotne) .
camera.aim_, camera.right_ i camera.up_ to oczywiście wektory 3D, a metodę rotateAboutAxis () można łączyć ze sobą z wikipedii i dowolnej liczby źródeł online. Y_AXIS jest wektorem o stałej stałej (0,1,0).
ASSERT_ORTHONORMAL () to sprawdzanie poprawności wyłącznie w trybie debugowania, które nigdy nie jest kompilowane w trybie zoptymalizowanym / zwolnionym.
Z góry przepraszam za kod w stylu C ... z drugiej strony, tutaj otrzymujesz porady od faceta o imieniu Mediocritus! ; ^)
źródło
Jest na to kilka sposobów (zobacz tutoriale tutaj , tutaj i tutaj, na przykład, a wiele innych jest dostępnych w Internecie za pośrednictwem Google). Technologia zastosowana w zasobach, które można znaleźć w Internecie, może się nieznacznie różnić (pod względem D3D, XNA, OpenGL itp.), Ale podstawowe zasady będą takie same:
Możesz wybrać przechowywanie wektorów bezpośrednio lub ponowne obliczenie podstawowej macierzy widoku za każdym razem, gdy potrzebujesz i wolisz. Ta technika jest bardzo elastyczna, więc jeśli potrzebujesz pomocy poza tymi ogólnymi krokami, możesz opublikować nowe pytanie z bardziej szczegółowym zapytaniem.
źródło
Aby uzyskać szczegółowe odniesienie do implementacji systemu kamer wykorzystującego Direct3D, polecam ten artykuł: http://www.toymaker.info/Games/html/camera.html . Autor opisuje także inne metody i funkcje, które można wykorzystać do rozszerzenia implementacji.
źródło