Co do chodzenia po kabinie, to coś jest nie tak. Odpalam sobie TD gdzie mam teoretycznie 100FPS. Podczas chodzenia po kabinie ekran trzęsie się, efekt jest tragiczny. Na TD to ja miałem ponad 60FPS-ów nawet na karcie wbudowanej w laptopa, i to tej gorszej z dwóch. Problemem nie jest wydajność symulatora czy silnika graficznego, tylko okropna prowizorka w obsłudze poruszania się po kabinie. Proponuję następujący oczywisty algorytm:
Klawisze strzałek powodują nadanie kamerze przyśpieszenia, które następnie jest szybko wytracane (hamowane) po zwolnieniu klawisza. Czyli klawisze sterują przyśpieszeniem, w najbardziej uproszczonym przypadku prędkością, a nie bezpośrednio pozycją kamery. Pozycja kamery musi być obliczana dla każdej klatki wyświetlania na podstawie czasu symulacji, niczego innego, dzięki temu szybkość poruszania NIE ZALEŻY od FPS.
Uproszczony zapis:
- jeśli wciśnięto klawisz, nadaj wartość przyśpieszenia a = a1, zwiększaj dla każdego kroku symulacji (klatki) prędkość poruszania się w danym kierunku
jako v = a * t gdzie t jest czasem symulacji niezależnym od FPS. v nie może przekroczyć oczywiście vmax.
- jeśli wciśnięto inny klawisz, ale nie zwolniono poprzedniego - nadaj wartość a = a1 dla składowej ruchu w kolejnym kierunku.
- jeśli zwolniono klawisz, nadaj wartość przyśpieszenia ujemną, czyli zmniejszaj prędkość poruszania się v = a * t, dla a = -1 aż [v = 0], czyli aż ruch w kierunku wektora przyśpieszenia nie ustanie.
Oczywiście to przesadne uproszczenie, gdyż należy wziąć pod uwagę kierunek wektora prędkości i wektora przyśpieszenia, dodawania i mnożenia wykonywać dla odpowiednich wektorów. Ruch powinien także zostać zatrzymany (poprzez wyzerowanie prędkości i przyśpieszenia) w momencie przekroczenia limitu kabiny w kroku obliczeń, musi to nastąpić przed zastosowaniem przemieszczenia kamery dla danej kratki. Czyli jeśli x = vx * t < x0 to vx = 0, ax = 0, x = x0.
To co prawda nie jest jeszcze "jak w Doomie" - ale już 100x lepiej. Koniec szarpania kamerą. Płynna animacja.
Oprócz tego bardzo bardzo bardzo przydałoby się, aby rolka myszy działała na FOV (kąt widzenia kamery) - czyli zoom z użyciem rolki.
Dalej, jeśli już ruszać kamerę: obecnie lewy i prawy przycisk myszy robią praktycznie to samo. Środkowy działa jako zoom. Opcja bardzo niewygodna. Ten sam chwilowy zoom powinien działać na prawym przycisku myszy, który jest po prostu łatwiejszy do wciśnięcia na większości myszek, co więcej, w większości gier jest właśnie wykorzystywany jako zoom. Niech lewy resetuje kamerę, albo jeszcze lepiej - np podwójne kliknięcie lewym, żeby nie wywoływało się tego przypadkowo. Środkowy przycisk myszy (klik rolką) powinien być raczej użyty do resetu samego FOV, który tą samą rolką się reguluje.