2013-02-23 2 views
7

Bei der Rückseitenkeulung können Sie entweder die Flächennormalen verwenden, um zu sehen, ob das Gesicht von der Kamera weg zeigt. Wenn das Dreieck im Uhrzeigersinn oder gegen den Uhrzeigersinn gezeichnet wird .Was ist eine im Uhrzeigersinn gerichtete Fläche in openGL

Ich bin verwirrt über diese Technik mit dem Uhrzeigersinn. Es scheint, dass bei dieser Methode die Reihenfolge der Eckpunktdaten, die an die Grafikkarte gesendet werden, entscheidet, ob sie auf die Kamera zu oder von ihr weg zeigt. Ich sehe nicht, wie das Sinn macht, weil die Kamera in jede Richtung schauen kann, als ob die Scheitelpunktdaten basierend auf der Kameraposition geändert werden müssten, und dies wird offensichtlich nicht auf der CPU durchgeführt.

Wie kann ich das verstehen?

+0

damit verbundene Frage auf math.SE: http://math.stackexchange.com/questions/297588/for-bsp-generation-how-to-intersect-or-locate-a-triangle-with-a-plane- Definiert-b/297905 # 297905 –

Antwort

10

Dies ist ein Dreieck von gegenüberliegenden Seiten her betrachtet:

clockwise vs counterclockwise

3 Punkte im 3D-Raum definiert ein Dreieck. Wenn diese Punkte geordnet sind (wie hier), bestimmen sie auch zwei Seiten (Flächen) eines Dreiecks: im Uhrzeigersinn und gegen den Uhrzeigersinn (sie werden durch die in einem Gesicht plazierte Ordnungsuhr bestimmt und zeigen ihre Eckpunkte)

ccw textured box

Wenn Sie die Würfel rollen (oder drehen Kamera um ihn herum) unser Dreieck von CCW:

Im obigen Beispiel Dreieck

Nun ist dieses Dreieck ist ein Element eines Würfels vorstellen, gegen den Uhrzeigersinn texturierten wird CW und wir wollen nicht mehr, dass es texturiert wird.

Dieser Würfel wäre in der Tat aus 12 solcher Dreiecke aufgebaut und wenn wir sie richtig bestellen, werden wir nur 6 texturieren, die gleichzeitig auf die Kamera gerichtet sind.

+1

Ich möchte nur hinzufügen, dass dies auch als * Chiralität * oder Händigkeit bekannt ist, und dass die Chiralität eines Koordinatensystems auch die Richtung bestimmt, in der eine Normale zeigt, abhängig von der Reihenfolge, in der Sie die Vektoren in das Kreuz setzen Produkt. Die Aussage "a × b = -b × a" gilt immer, aber die Spiegelung der Chiralität hat den gleichen Effekt. – datenwolf

+0

also sagt die Reihenfolge, entweder CW oder CCW, der GPU, welche Seite vorne ist, aber ich verstehe nicht, wie das möglich ist, da die Kameraausrichtung entscheidet, ob Gesichter nach vorne oder weg zeigen. –

+0

genau. Das ist der springende Punkt. Auf der linken Seite der obigen Bildkamera befindet sich "hinter" dem Dreieck und auf der rechten Seite ist es "davor". und du willst nur eine Seite texturieren. – fsw

5

Ich werde Sie das an einem Beispiel Quad zeigen:

(0,0)-------(1,0) 
    |   | 
    |  X  | 
    |   | 
    (0,1)-------(1,1) 

Nehmen wir an, wir (0,0) beginnen. Wenn Sie jetzt die Scheitelpunkte in der Reihenfolge "im Uhrzeigersinn" aufziehen, sind die nächsten (1,0), (1,1) und (0,1). (1,0) liegt mehr oder weniger auf 2 Uhr, (1,1) ist 4, und so weiter.

Also die Daten im GPU-Speicher: 0,0, 1,0, 1,1, 0,1.

Wenn Sie die Aufwickelrichtung mit Ihrer Einstellung korrelieren, können Sie leicht unterscheiden, was "vorne" und "zurück" ist - um sich das besser vorzustellen, Sie könnten es auf etwas Transparentes zeichnen, dann von der anderen Seite schauen die Richtung würde umgekehrt sein. Die Spezifikation der Aufwickelrichtung dient lediglich dazu, der GPU zu sagen, welche Seite vorne ist und welche Seite zurück ist, da sie es selbst nicht tun kann - beide Seiten eines Dreiecks sind gleich gut und der Normalvektor des gegebenen Polygons kann entweder N oder -N sein. Die GPU kann jedoch überprüfen, welche von ihnen mit der richtigen Aufwicklungsreihenfolge ausgerichtet ist.

Kapitel 2 von The (Old) Red Book hat einige nette Erklärungen in Bezug auf OpenGL spezifische Sachen, das ist immer noch ziemlich relevant heute.

+0

also die Reihenfolge, entweder CW oder CCW, sagt der GPU, welche Seite vorne ist, aber ich verstehe nicht, wie das möglich ist, da die Kameraausrichtung entscheidet, ob Gesichter nach vorne oder weg zeigen. –

+0

Das ist der Punkt. Wenn Sie die Gesichter von hinten betrachten, können sie beim Zeichnen einfach ignoriert werden, weil sie sicher von den Vorderseiten verdeckt werden (transparente Modelle sind eine Ausnahme - in diesem Fall müssen Vorder- und Rückseite identisch sein) gezeichnet). –

1

Das ist genau der Punkt: die Scheitelreihenfolge hat nicht mit Kameraorientierung zu tun anfänglich, wenn Sie das Gesicht erstellen/zeichnen! Beachten Sie, dass eine Kamera nur eine Transformation ist und nicht von OpenGL selbst erkannt wird.
Beim Rendern prüft openGL also einfach die neue Reihenfolge der Flächenscheitelpunkte (nachdem alle Transformationen angewendet wurden), nachdem Sie die Kamera 'gesehen' haben. , um das Gesicht anzuzeigen oder nicht.

Verwandte Themen