Proszę, wybacz mi, ale potrzebuję pomocy i utknąłem w tym od kilku tygodni, nie robię postępów i wszędzie idę i widzę inną odpowiedź, wszystko, co próbuję, nie działa. Mam już wystarczająco dużo wskazówek i porad, teraz naprawdę potrzebuję tylko kogoś, kto udzieli mi odpowiedzi, aby móc pracować wstecz, ponieważ nie mogę tego zrozumieć.
To, co sprawiło, że ten temat jest najbardziej zagmatwany, to sposób, w jaki każdy stosuje inny zestaw konwencji lub reguł, a ich odpowiedzi oparte są na ich własnych konwencjach, nie określając, czym one są.
Oto zestaw konwencji, które utworzyłem w oparciu o to, co wydaje się najbardziej powszechne i logiczne:
- Reguła prawej ręki dla osi.
- Pozytywne Y jest w górę, Pozytywne Z jest skierowane w stronę widza, Pozytywne X jest w prawo.
- Wiersze Główne matryce, transponowane, gdy są wysyłane do shaderów.
- Skok: obrót wokół osi X.
- Odchylenie: obrót wokół osi y
- Roll: obrót wokół osi Z.
- Kolejność rotacji: Roll, Pitch, Yaw (czy to prawda? Czy ktoś może mnie sprawdzić?)
- Dodatnie wartości obrotu, patrząc od dodatniego końca osi, powodują obrót w prawo.
- Domyślnym kierunkiem obrotu 0 we wszystkich osiach jest wektor skierowany w dół do ujemnego Y.
.. biorąc pod uwagę te konwencje (z całą pewnością popraw mnie, jeśli się mylą!), w jaki sposób:
- Napisz funkcję LookAt? (lookAt (pozycja wektora, wektorowe ustawienie ostrości, wektor w górę))
- Oblicz macierz obrotu. (obrót (x, y, z))
Próbowałem odpowiedzieć na te dwa pytania samemu przynajmniej w ciągu ostatnich 3 tygodni, przepisałem moją funkcję LookAt & Rotation Matrix co najmniej 30 razy, przetestowałem dziesiątki metod i przeczytałem materiał, który widziałem na setki stron internetowych i przeczytałem wiele odpowiedzi na pytania, skopiowałem kod innych osób i nic, co do tej pory nie zrobiłem, nie zadziałało, wszystko przyniosło zły wynik. Niektóre z nich stworzyły zabawnie dziwaczne wyniki, które nie są nawet bliskie prawidłowej rotacji.
Pracowałem nad tym każdej nocy, z wyjątkiem ostatniej nocy, ponieważ byłem tak sfrustrowany powtarzającymi się niepowodzeniami, że musiałem się zatrzymać i zrobić sobie przerwę.
Proszę, po prostu pokaż mi, jaka jest poprawna metoda, abym mógł cofnąć się od tego i dowiedzieć się, jak to działa, po prostu nie otrzymuję poprawnej odpowiedzi, co doprowadza mnie do szału!
Piszę w Javie, ale wezmę kod napisany w dowolnym języku, większość mojego kodu do renderowania 3D działa naprawdę doskonale, to tylko matematyka, której nie rozumiem.
AKTUALIZACJA: ROZWIĄZANE
Dziękuję za pomoc! Mam teraz działającą funkcję LookAt, którą właściwie rozumiem i nie mogłem być szczęśliwszy (jeśli ktoś chciałby to zobaczyć, pytaj).
Ponownie próbowałem utworzyć matrycę obrotu opartą na zmiennych nachylenia / odchylenia / przechylenia i znów wydawało się, że zawiodło, ale zdecydowałem się zrzucić próbę użycia kątów Eulera dla kamery freelook, ponieważ wydaje się ona nieodpowiednia dla rola, zamiast tego zamierzam stworzyć klasę czwartorzędową, może lepiej będzie zejść tą ścieżką, w przeciwnym razie skorzystam z pitch / yaw jako współrzędnych sferycznych i polegam na nowej działającej funkcji LookAt do obracania.
Jeśli ktoś ma podobny problem i chce mi zadać pytania, nie krępuj się.
Przynajmniej nie utknąłem już, dzięki za pomoc!
float[16]
.