gluLookAt () wird am besten in der GL_PROJECTION-Matrix oder in der GL_MODELVIEW-Matrix verwendet

8

Die OpenGL-Dokumentation besagt, dass die Aufrufe von gluLookAt () in der GL_MODELVIEW-Matrix ausgeführt werden sollten:

Ссылка

Tatsächlich verlinken die Dokumente auf einen Artikel, der besagt, dass die Verwendung von gluLookAt () in der GL_PROJECTION-Matrix extrem schlecht ist:

Helfen Sie mit dem Missbrauch von GL_PROJECTION

Andererseits gibt es viele Tutorials und Beispiele, in denen gluLookAt () tatsächlich in der GL_PROJECTION-Matrix aufgerufen wird. Und zur gleichen Zeit, während der oben erwähnte Artikel sagt, es NICHT auf der GL_PROJECTION-Matrix zu verwenden, sagt es, dass es in den meisten derartigen Verwendungen kein sichtbares Problem dabei gibt.

Meine Fragen lauten dann: Was ist der beste Weg, gluLookAt () in realen Projekten zu verwenden? Ist es wirklich so ein Nein, es in der Matrix GL_PROJECTION zu verwenden?

    
Shivan Dragon 02.03.2012, 20:19
quelle

3 Antworten

8

Die Funktion gluLookAt () gibt Ihnen eine Transformationsmatrix, die eine Drehung eines Objekts in Ihrer Szene transformiert. Das ist also eine Modelltransformation und muss in die GL_MODELVIEW-Matrix gehen.

Was das Warum betrifft, wird dies klarer, wenn Sie es selbst in einem Vertex-Shader tun:

Während die Position der Scheitelpunkte tatsächlich nur v.pos * modelview * projection ist, wird die Modellansichtsmatrix ohne die Projektionskomponente für andere Berechnungen (z. B. Beleuchtung und Nebel) benötigt. Deshalb trennt die feste Funktionspipeline diese zwei Matrizen.

Also sollten Sie sich an die Paradigmen halten, die in der API spezifiziert sind und insbesondere niemals einer der Myriaden von schlechten OpenGL-Tutorials vertrauen.

    
Tobias Schlegel 02.03.2012, 21:07
quelle
2

Ich bin mir nicht sicher, ob ich die Frage verstehe. Fragen Sie, warum die Seite Ihnen sagt, dass Sie nichts tun sollen, was nur "die meiste Zeit" funktioniert?

Es ist wirklich nicht so schwer zu verstehen. "Die meisten solcher Verwendungen" bedeutet definitionsgemäß, dass es einige solche Verwendungen gibt, die Probleme aufweisen.

So können Sie entweder die Dinge tun, die manchmal funktionieren und dann andere brechen, oder Sie können Dinge tun, die immer funktionieren .

Das ist keine schwierige Entscheidung. Noch mehr, denn wenn man es richtig macht, bewegt man eine Codezeile buchstäblich ein paar Zeilen nach unten.

    
Nicol Bolas 02.03.2012 20:26
quelle
1
  

Meine Fragen lauten dann: Was ist der beste Weg, gluLookAt () in realen Projekten zu verwenden? Ist es wirklich so ein Nein, es in der Matrix GL_PROJECTION zu verwenden?

Verwenden Sie immer die Modelview-Matrix, um den Ansichtspunkt zu positionieren. Dies ist sogar in der Matrix 'Name Modell (d. H. Platzierung der Geometrie) und Ansicht (Platzierung des Standpunkts).

Die Projektionsmatrix ist eine Art Linse der OpenGL- "Kamera". Sie bewegen nicht das Objektiv Ihrer Kamera und halten das Kameragehäuse an Ort und Stelle, um die Ansicht einzustellen, oder? Das Bewegen des Objektivs hat seine Anwendungen, wie die Implementierung von Tilt- / Shift-Effekten.

    
datenwolf 02.03.2012 21:06
quelle

Tags und Links