2016-03-28 14 views
3

Ich verstehe, dass die Kamera in OpenGL definiert ist, in der negativen Z-Richtung zu suchen. So in einem einfachen Beispiel, ich stelle mir vor, dass für meine Ecken gemacht werden, müssen sie auf die folgende ähnlich definiert werden:OpenGL: Muss eine Ecke Z-Koordinate negativ sein oder nicht?

rawverts = { 
    0.0f, 0.0f, -1.0f, 
    0.0f, 0.5f, -1.0f, 
    0.5f, 0.0f, -1.0f, 
}; 

jedoch absolut keinen Führer mir die Antwort sagen wird. Überall, wo ich hinschaue, wird das Beispiel "Hello triangle" mit der z-Koordinate links bei 0 gemacht, und immer wenn ein komplexeres Netz definiert wird, werden die Koordinaten nicht einmal angezeigt. Ich habe immer noch keine Ahnung von den möglichen Werten der Koordinaten, damit sie auf den Bildschirm gezeichnet werden können. Nehmen Sie zum Beispiel, glm :: Perspektive:

glm::mat4 projectionMatrix = glm::perspective(
    FoV,   // The horizontal Field of View, in degrees : the amount of "zoom". Think "camera lens". Usually between 90° (extra wide) and 30° (quite zoomed in) 
    4.0f/3.0f, // Aspect Ratio. Depends on the size of your window. Notice that 4/3 == 800/600 == 1280/960, sounds familiar ? 
    0.1f,  // Near clipping plane. Keep as big as possible, or you'll get precision issues. 
    100.0f  // Far clipping plane. Keep as little as possible. 
); 

Aber wie können die Abschneideebene mit irgendwelchen positiven Werten definiert werden? Die Kamera zeigt auf die -Z-Richtung! Außerdem, wenn ich nahe/ferne Schnittebenen bei, sagen wir, -1 und -4 erzeuge, macht dies jetzt jede Z-Koordinate ungültig, die mehr als -1 oder weniger als -4 ist. Oder sind die rohen z-Koordinaten immer nur zwischen 0 und -1 gültig (wieder können sicher z-Koordinaten grundsätzlich nicht positiv sein?) ..?

Aber nehmen wir an, dass was tatsächlich passiert, ist, dass OpenGL (oder Glm) die Clipping-Ebene Werte und negiert sie negiert. Also, meine -1 bis -4 wird 1 bis 4. Bedeutet dies jetzt ungültig Z-Koordinate, die weniger als 1 und mehr als 4 ist, warum 0.0f, 0.0f, -1.0f wird nicht auf dem Bildschirm gezeichnet werden?

In diesem Stadium würde ich behandeln behandeln eine Antwort als einfach ein Zeiger auf ein Buch oder etwas Material, das Informationen zu diesem Thema hat.

+0

Nah und Fern ist immer definiert als Entfernung zur Kamera, nicht als bestimmte Punkte im Raum. Andernfalls wären die Clipping-Ebenen beim Bewegen der Kamera überall. Es passiert einfach, dass die Kamera standardmäßig nach -z schaut. – weltensturm

Antwort

3

Nein, Punkte/Scheitelpunkte können eine positive z-Koordinate haben, aber Sie werden sie nur sehen, wenn die Kamera zurückbewegt wird.

This article spricht darüber etwa ein Drittel des Weges durch.

+0

Ok, also sagen wir, ich bewege die Kamera um 1000.0f Einheiten zurück und möchte dann 'glm :: perspective()' verwenden - wie verhalten sich dann die nahen und fernen Ebenen? –

+2

@MaxB Die Clipping-Ebenen sind immer relativ zur Kamera. Sie müssen sie nicht ändern, wenn Sie die Kamera bewegen. – HolyBlackCat

0

Ihr Problem ist, dass Sie die Koordinatensysteme und Transformationen nicht verstehen.

Zuerst gibt es die Fensterkoordinaten. Es ist das Pixelraster in Ihrem Fenster, rein und einfach. Es gibt keine Z-Achse.

Als nächstes ist NDC. Google es. Es ist ein Würfel von -1 bis 1 in xyz-Achsen. Wenn Sie sowohl Modelview- als auch Projektionsmatrizen mit Identität laden, ist dies der Raum, in dem Sie rendern. Durch die Angabe des Viewports transformieren Sie von NDC zu Fensterkoordinaten. Pixel von Scheitelpunkten außerhalb des Würfels werden abgeschnitten.

Was Sie mit Projektions- und Modelview-Matrix tun, ist, dass Sie eine Transformation auf dem NDC-Cube erstellen, die Ihre Objekte abdeckt. Wenn Sie die Kamera bewegen, ändern Sie die Transformation. Die Transformation kann einen Stützpunkt von einem beliebigen Ort auf den NDC-Würfel übertragen, einschließlich negativer z-Koordinaten.

Das ist die kurze Version, wie die Dinge funktionieren. Die lange Version ist zu lang, um hier einzutreten. Für weitere Informationen stellen Sie bitte spezifische Fragen oder besser noch lesen Sie eine Literatur zum Thema.

Verwandte Themen