2010-09-01 16 views
6

Ich habe Probleme damit, meinen Kopf herumzulegen, wie diese funktionieren. Zuerst sollte die Projektionsmatrix in einem 2D-Spiel als ortho mit links, rechts, oben, unten, passend zum Fenster, rechts? Aber wenn das Fenster die Größe ändert, sollte ich einfach glViewport ändern, nicht die Projektionsmatrix? Und wie behalte ich das Seitenverhältnis?OpenGL - ortho Projektionsmatrix, glViewport

Könnte jemand die Zwecke dieser beiden Dinge erklären, im 2d orthographischen Spiel, damit ich es besser verstehen kann?

Es fühlt sich an wie OpenGL macht eine Menge nutzlos Zeug in einem 2d-Setup. Rasterung und Berechnung von Fragmenten, wenn die Bilder bereits vorhanden sind, Konvertieren von Scheitelpunktkoordinaten in NDC, um sie dann wieder in das umzuwandeln, was sie bereits in glViewport hatten.

Auch, wie in Legacy frei OpenGL müssen wir unsere eigenen Matrizen machen, aber nicht unsere eigenen Berechnungen, die glViewport tut?

Danke.

Antwort

5

hilft Verwechseln Sie nicht, was Sie eingegeben GL und was es gibt.

Die Parameter, die Sie zum Berechnen der Ortho-Matrix verwenden, entsprechen denen, die mit Ihrem -Eingang übereinstimmen. Die Ausgabe einer Projektionsmatrix ist immer der [-1: 1] x [-1: 1] x [-1: 1] -Würfel.

Das Ansichtsfenster übersetzt diesen Würfel in Ihre Renderzielkoordinaten. Das ist normalerweise das, was Sie ändern möchten, um es an Ihre neue Fenstergröße anzupassen (nun, das und den Framebuffer selbst).

Ja, GL macht eine Menge unnützes Zeug für einen 2D-Rendering-Pfad. Es ist eine 3D-API nach allem ...

Ich werde damit abschließen, dass Sie keine Matrizen für 2D-Transformationen erstellen müssen, solange Ihr Vertex-Shader in dem zuvor erwähnten Cube ausgegeben wird. Wenn Sie die obere rechte Ecke des Ansichtsfensters schreiben möchten, können Sie Ihre Scheitelpunkte immer direkt als (0,0) (0,1) (1,0) (1,1) übergeben und einfach ausgeben.

+0

Danke, ich glaube, ich verstehe jetzt, und ich verwechselte Eingabe mit Ausgabe. Die Verwendung einer Projektionsmatrix macht es viel einfacher, da ich Eckpunktkoordinaten verwende, die Fensterpixeln entsprechen. Das Zeug, das es tut, ist nicht wirklich nutzlos, weil das Rastern von Scheitelpunkten mit Texturen bedeutet, dass OpenGL sie für Sie skalieren kann und Sie zum Beispiel präzise Scheitelpunkte verwenden und Dinge rotieren können, und OpenGL ist immer noch der schnellste Weg, dies zu tun. Habe ich recht? – mk12

-2

Nicht sicher, welche Sprache Sie OpenGL in verwenden, aber wenn Sie C++ diese Seite suchen, deckt http://nehe.gamedev.net/ ziemlich alles ab und hat Tutorials von so einfach wie "Hallo Welt" den ganzen Weg bis zu grundlegenden Spielen und 3D-Effekten .

Hoffe, dass es

+6

Nehe lehrt die Verwendung der veralteten festen Funktion Pipeline, die ich nicht verwenden möchte (und auch aus einer C++ - Windows-Perspektive). Ich benutze Objective C übrigens auf einem Mac. Und ich suchte nach einer spezifischen Antwort. – mk12