Frustum

Aus DGL Wiki
Wechseln zu: Navigation, Suche

Was ist ein Frustum?

Frustum (dt. Stumpf) oder häufig auch als "viewing frustum" bezeichnet, steht im Bereich der 3D-Grafik für einen Körper, dessen Inhalt in irgendeiner Form auf den Bildschirm projeziert wird. Fast immer ist die Projektionsebene (^= Bildschirm) eine Randebene des Frustums. Das menschliche Auge projeziert ein perspektivisches Frustum auf die Netzhaut: Mit steigender Entfernung wird ein Objekt direkt proportional kleiner.

Frustum.png

Um beim menschlichen Auge zu bleiben: Das grüne Viereck stellt die Projektionsebene, also die Netzhaut dar. Alles was weiter links davon liegt, wird durch die Linse auf die Netzhaut projeziert und wird damit sichtbar, wenn es nicht von einem anderen Objekt verdeckt wird. Das Viewing Frustum ist dann der Pyramidenstumpf, der sich links der grünen Ebene ins Unendliche erstreckt.

OpenGl Frustum

Perspektivisches Frustum

Ein perspektivisches Frustum ist dem unseres Auges sehr ähnlich. Als Projektionsebene dient hier jedoch nicht die Netzhaut, sondern der Bildschirm. Alles was vor dem Bildschirm liegt, wird nicht angezeigt => wird von der Near Clipping Plane zum Betrachter hin abgeschnitten. Selbiges gilt für alles was über, unter, rechts und links des Frustums liegt und auch für alles, was sich hinter der Far Clipping Plane befindet (Im Bild durch die rote Ebene dargestellt). Um ein perspektivisches Frustum in OpenGl zu definieren wählt man zuerst die Projektionsmatrix an, läd die Identitätsmatrix und benutzt gluPerspective oder glFrustum, um den Sichtkegel zu definieren:

  // Projektionsmatrix zurücksetzen
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();

  // Perspektivische Darstellung
  gluPerspective(60.0, ClientWidth / ClientHeight, NearClipping, FarClipping);
  glMatrixMode(GL_MODELVIEW);

Orthogonales Frustum

Ein orthogonales Frustum erzeugt ein gänzlich anderes Bild unserer Umgebung. Gleich große Objekte werden, wenn sie parallel liegen auch immer gleich groß angezeigt. Ihre Positionierung im Raum hat auf ihre Grösse dagegen keinen Einfluss. Genauso wie das perspektivische Frustum, wird auch das orthogonale von 6 Ebenen (links, rechts, oben, unten, vorne, hinten) eingegrenzt.

Diese Art der Darstellung wird meist verwendet, wenn man Dinge isometrisch oder 2-Dimensional anzeigen möchte oder eine der für CAD Programme typsichen Seitenansichten gefragt ist. Um ein solches Frustum in OpenGl einzusetzen kann man die Funktionen glOrtho und gluOrtho2D verwenden:

  // Projektionsmatrix zurücksetzen
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  
  // Perspektivische Darstellung
  gluOrtho2D(0, 639, 0, 479);
  glMatrixMode(GL_MODELVIEW);

Viewing Frustum Detection

Viewing Frustum Detection bezeichnet ein Verfahren, bei dem die 6 das Frustum begrenzenden Ebenen aus der Projektionsmatrix extrahiert werden und deren genaue Postion in der Szene dann mithilfe der Modelviewmatrix bestimmt wird.

Beim Frustum Culling werden diese Informationen benutzt um zu bestimmen, ob ein Objekt momentan sichtbar ist. Das führt bei Betrachterpositionen inmitten der Szene zu einer höheren Bildrate, da grössere Polygonmengen von vornherein ausgeschlossen werden können und so für alle Ausgeschlossenen alle weiteren Berechnungen entfallen.

Siehe Auch

Tutorial_Frustum_Culling