Ich möchte nicht in komplexe Trigonometrie gehen, um Rotationen und ähnliches für meine 3D Welt zu berechnen, daher erscheint gluLookAt als eine gute Alternative. Laut der Dokumentation muss ich nur 3 Koordinaten für die Kameraposition angeben, drei für was ich schauen sollte und eine "Oben" -Position. Das letzte machte keinen Sinn, bis ich annahm, dass es im rechten Winkel mit der Sichtlinie in der Richtung, die der obere Bildschirmrand sein sollte, sein sollte.Wie verwende ich gluLookAt richtig?
Es funktioniert überhaupt nicht so. Ich habe etwas Python-Code. Dies ist der Code, der einige Daten und einige Mode-Code initialisiert, wenn ich diesen Teil des Spiels eingeben:
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)“ im Grunde die Projektionsmatrix richtet ein haben 45 Grad Blickwinkel und nah und fern Koordinaten von 0,1 und 100.
Der erste gluLookAt bringt die Kamera in die richtige Position, schön.
Ich habe einen Würfel mit der Mitte von (0,0,0) gezogen und es funktioniert gut ohne gluLookAt. Bevor ich es zeichnen habe ich diesen Code:
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()
nun davon sollte immer die obere Position die gleiche sein, wie es immer im rechten Winkel ist. Was ich gedacht hätte, wäre, die Z-Achse mit den Auf- und Abwärtstasten und links und rechts durch die X-Achse mit den linken und rechten Tasten vorwärts und rückwärts zu bewegen. Was tatsächlich passiert ist, wenn ich die linke und rechte Taste benutze, dreht sich der Würfel um das "Auge", das durch die Tasten beschleunigt wird. Die Nach-oben-Taste bewirkt, dass ein anderer Würfel aus dem Nichts durch den Bildschirm schneidet und den ersten Würfel trifft. Der Abwärtstaste bringt den geheimnisvollen geklonten Würfel zurück. Dies kann mit der Rotation kombiniert werden, um ein völlig anderes Ergebnis zu erzielen, als die Dokumentation würde erscheinen.
Was in aller Welt ist falsch?
Vielen Dank.
Vielen Dank. Es funktioniert jetzt perfekt. Ich kann jetzt zu fortgeschritteneren Dingen übergehen. Aber sagst du, gluLookAt ist langsam? –
Es ist nicht so, dass es langsam ist. Es ist, dass gluLookAt ein paar Dinge versteckt, die Sie wissen sollten, wenn Sie ernsthafte OpenGL-Programmierung machen. Insbesondere sollten Sie lernen, verschiedene Koordinatentransformationen zu kombinieren.Das ist gewöhnungsbedürftig und zunächst etwas frustrierend, aber am Ende zahlt es sich aus: Viele Grafiktechniken bauen auf clevere Koordinatensysteme auf. –
+1 wenn du deinen Kopf neigst :-) –