Nie chcę wchodzić w złożoną trygonometrię, aby obliczyć obroty i podobne rzeczy w moim świecie 3D, więc gluLookAt wydaje się być dobrą alternatywą. Zgodnie z dokumentacją wszystko, co muszę zrobić, to umieścić 3 współrzędne dla pozycji kamery, trzy dla tego, na co powinienem patrzeć i pozycję "do góry". To ostatnie nie miało sensu, dopóki nie przypuszczałem, że musi być pod kątem prostym z linią wzroku w kierunku, w którym powinna znajdować się góra ekranu.Jak prawidłowo używać gluLookAt?
To w ogóle nie działa. Mam trochę kodu Pythona. Jest to kod, który inicjuje pewne dane i trochę kodu tryb dla kiedy wprowadzić tę część gry:
def init(self):
self.game_over = False
self.z = -30
self.x = 0
def transfer(self):
#Make OpenGL use 3D
game.engage_3d(45,0.1,100)
gluLookAt(0,0,-30,0,0,0,0,1,0)
„game.engage_3d (45,0.1,100)” w zasadzie tworzy macierz projekcji mieć 45 ° kąt widzenia i bliskie i dalekie współrzędne 0,1 i 100.
Pierwszy gluLookAt ustawia aparat we właściwej pozycji, ładnie.
Mam sześcian narysowany ze środkiem (0,0,0) i działa dobrze bez gluLookAt. Zanim go narysuję, mam ten kod:
gluLookAt(self.x,0,self.z,0,0,0,0,1,0)
if game.key(KEY_UP):
self.z += 2.0/game.get_fps()
if game.key(KEY_DOWN):
self.z -= 2.0/game.get_fps()
if game.key(KEY_LEFT):
self.x += 2.0/game.get_fps()
if game.key(KEY_RIGHT):
self.x -= 2.0/game.get_fps()
Teraz pozycja górna powinna zawsze być taka sama jak zawsze pod kątem prostym. Myślałem, że to zrobi, to przesuwanie do przodu i do tyłu osi z za pomocą klawiszy w górę iw dół oraz w lewo i w prawo przez oś X za pomocą lewego i prawego klawisza. To, co się dzieje, polega na tym, że kiedy używam lewego i prawego klawisza, sześcian obraca się wokół "oka" przyspieszanego przez klawisze. Klawisz w górę powoduje, że kolejna kostka znikąd przesuwa się po ekranie i trafia w pierwszą kostkę. Naciśnięcie klawisza przywraca tajemniczy sklonowany sześcian. Można to połączyć z rotacją, aby dać zupełnie inny wynik, jak wynikałoby z dokumentacji.
Co na ziemi jest nie tak?
Dziękuję.
Dziękuję bardzo. Teraz działa idealnie. Mogę teraz przejść do bardziej zaawansowanych rzeczy. Ale czy mówisz, że gluLookAt jest wolny? –
Nie chodzi o to, że jest wolny. To, że gluLookAt ukrywa kilka rzeczy, o których powinieneś wiedzieć, kiedy robisz poważne programy OpenGL. W szczególności powinieneś nauczyć się łączyć różne transformacje współrzędnych.To wymaga przyzwyczajenia się i na początku jest nieco frustrujące, ale w końcu się opłaca: wiele technik graficznych opiera się na przemyślnym przekształcaniu układów współrzędnych. –
+1, jeśli faktycznie przechyliłeś głowę :-) –