glClipPlane: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
()
K (Name: Fläche -> Ebene)
 
(9 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
{{Excellent}}
 
= glClipPlane =
 
= glClipPlane =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
'''glClipPlane''' - Beschreibt eine Fläche, gegen die alle Geometrie geschnitten wird.
+
'''glClipPlane''' - Beschreibt eine [[Ebene]], gegen die alle Geometrie geschnitten wird.
  
<br>
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  procedure '''glClipPlane'''(''plane'' : glEnum; const ''equation'' : glDouble);
+
  procedure '''glClipPlane'''(''plane'' : GLEnum; const ''equation'' : PGLDouble);
 +
 
 +
 
  
<br>
 
 
== Parameter ==
 
== Parameter ==
 
<table border=1 rules=all>
 
<table border=1 rules=all>
 
<tr>
 
<tr>
 
  <td>''plane''</td>
 
  <td>''plane''</td>
  <td>Gibt an welche Schnittfläche positioniert werden soll. Gültig ist hier eine symbolische Konstanten '''GL_CLIP_Plane'''''i'', wobei ''i'' zwischen 0 und '''GL_MAX_CLIP_PLANES'''-1 liegen muss.</td>
+
  <td>Gibt an welche Schnittfläche positioniert werden soll. Gültig ist hier eine symbolische Konstanten '''GL_CLIP_PLANE'''''i'', wobei ''i'' zwischen 0 und '''GL_MAX_CLIP_PLANES'''-1 liegen muss.</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
Zeile 22: Zeile 24:
 
</table>
 
</table>
  
<br>
+
 
 +
 
 
== Beschreibung ==  
 
== Beschreibung ==  
Die Geometrie wird immer gegen die Grenzen des aus sechs Flächen bestehenden Frustums (x,y und z) geschnitten. '''glClipPlane''' erlaubt darüber hinaus die Angabe zusätzlicher Schnittflächen, die jedoch nicht genau auf einer der drei Achsen (x,y,z) liegen müssen, gegen die die Geometrie dann auch geschnitten wird. Um festzustellen wie viele zusätzliche Schnittflächen unterstützt werden, kann man [[glGet|glGetIntegerv]] mit dem Argument '''GL_MAX_CLIP_PLANES''' aufrufen. Als Minimum muss eine Implementation sechs zusätzliche Schnittflächen unterstützen. Da die resultierende Schnittregion die Intersektion der definierten Halb-Räume darstellt, ist sie immmer konvex.
+
Die Geometrie wird immer gegen die Grenzen des aus sechs Flächen bestehenden Frustums (x,y und z) geschnitten. '''glClipPlane''' erlaubt darüber hinaus die Angabe zusätzlicher Schnittflächen, die jedoch nicht genau auf einer der drei Achsen (x,y,z) liegen müssen, gegen die die Geometrie dann auch geschnitten wird. Um festzustellen wie viele zusätzliche Schnittflächen unterstützt werden, kann man [[glGet|glGetIntegerv]] mit dem Argument '''GL_MAX_CLIP_PLANES''' aufrufen. Als Minimum muss eine Implementation sechs zusätzliche Schnittflächen unterstützen. Da die resultierende Schnittregion die Intersektion der definierten Halb-Räume darstellt, ist sie immer [[konvex]].
  
 
'''glClipPlane''' beschreibt einen Halb-Raum, der eine vier-Komponenten Flächenentsprechung nutzt. Wenn '''glClipPlane''' aufgerufen wird, wird diese Entsprechung mit der inversen Modelansichtsmatrix transformiert und dann in den daraus resultierenden Betrachter-Koordinaten ("Aug-Raum") abgelegt. Darauf folgende Änderungen an der Modelansichtsmatrix haben danach dann keinen Effekt mehr auf die abgelegten Komponenten der Flächenentsprechung. Wenn das Skalarprodukt der Betrachter-Koordinaten eines Eckpunktes und den Komponenten der Flächenentsprechung positiv oder gleich Null ist, dann liegt dieser Eckpunkt "in" dieser Schnittfläche, ansonsten nicht.
 
'''glClipPlane''' beschreibt einen Halb-Raum, der eine vier-Komponenten Flächenentsprechung nutzt. Wenn '''glClipPlane''' aufgerufen wird, wird diese Entsprechung mit der inversen Modelansichtsmatrix transformiert und dann in den daraus resultierenden Betrachter-Koordinaten ("Aug-Raum") abgelegt. Darauf folgende Änderungen an der Modelansichtsmatrix haben danach dann keinen Effekt mehr auf die abgelegten Komponenten der Flächenentsprechung. Wenn das Skalarprodukt der Betrachter-Koordinaten eines Eckpunktes und den Komponenten der Flächenentsprechung positiv oder gleich Null ist, dann liegt dieser Eckpunkt "in" dieser Schnittfläche, ansonsten nicht.
Zeile 32: Zeile 35:
 
In der Voreinstellung sind alle Schnittflächen als (0, 0, 0, 0) (in Betrachter-Koordinaten) definiert und deaktiviert.
 
In der Voreinstellung sind alle Schnittflächen als (0, 0, 0, 0) (in Betrachter-Koordinaten) definiert und deaktiviert.
  
<br>
+
 
  
 
==Beispiel==
 
==Beispiel==
Zeile 49: Zeile 52:
 
     gluSphere(Q,1,40,40);
 
     gluSphere(Q,1,40,40);
  
{| border="1" rules="all"
+
<div align="center">
 +
{| {{Prettytable_B1}}
 
! Kugel ohne aktivierte Clipebene  
 
! Kugel ohne aktivierte Clipebene  
 
! Kugel mit aktivierter Clipebene
 
! Kugel mit aktivierter Clipebene
Zeile 56: Zeile 60:
 
| [[Bild:Kugel_LINE_Clip.jpg]]
 
| [[Bild:Kugel_LINE_Clip.jpg]]
 
|}
 
|}
 +
</div>
  
 
== Hinweise ==
 
== Hinweise ==
Zeile 61: Zeile 66:
  
 
Normalerweise werden entlang der Schnittkante Polygone so berechnet, dass keine Löcher entstehen. Bei sehr alten, schlecht implementierten Treibern können eventuell Löcher sichtbar sein.
 
Normalerweise werden entlang der Schnittkante Polygone so berechnet, dass keine Löcher entstehen. Bei sehr alten, schlecht implementierten Treibern können eventuell Löcher sichtbar sein.
<br>
+
 
 +
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
Zeile 68: Zeile 74:
 
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glClipPlane''' zwischen einem [[glBegin]] und dem passenden [[glEnd]] aufgerufen wird.
 
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glClipPlane''' zwischen einem [[glBegin]] und dem passenden [[glEnd]] aufgerufen wird.
  
<br>
+
 
 +
 
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGetClipPlane]]<br>
+
[[glGetClipPlane]]
 +
 
 
[[glIsEnabled]] mit dem Token '''GL_CLIP_PLANE'''''i''
 
[[glIsEnabled]] mit dem Token '''GL_CLIP_PLANE'''''i''
  
<br>
+
 
  
 
== Siehe auch ==
 
== Siehe auch ==
Zeile 79: Zeile 87:
  
 
[[Kategorie:GL|ClipPlane]]
 
[[Kategorie:GL|ClipPlane]]
 +
[[Kategorie:GL1.0|ClipPlane]]

Aktuelle Version vom 12. Oktober 2013, 18:30 Uhr

Hinweis: Dieser Artikel wurde von den Benutzern des Wikis zum exzellenten Artikel berufen!
(weitere exzellente Artikel)
Excelent.jpg

glClipPlane

Name

glClipPlane - Beschreibt eine Ebene, gegen die alle Geometrie geschnitten wird.

Delphi-Spezifikation

procedure glClipPlane(plane : GLEnum; const equation : PGLDouble);


Parameter

plane Gibt an welche Schnittfläche positioniert werden soll. Gültig ist hier eine symbolische Konstanten GL_CLIP_PLANEi, wobei i zwischen 0 und GL_MAX_CLIP_PLANES-1 liegen muss.
equation Zeigt auf ein Array dass vier Fließkommawerte mit doppelter (wichtig!) Genauigkeit beinhaltet, welche als Flächenentsprechung verstanden werden.


Beschreibung

Die Geometrie wird immer gegen die Grenzen des aus sechs Flächen bestehenden Frustums (x,y und z) geschnitten. glClipPlane erlaubt darüber hinaus die Angabe zusätzlicher Schnittflächen, die jedoch nicht genau auf einer der drei Achsen (x,y,z) liegen müssen, gegen die die Geometrie dann auch geschnitten wird. Um festzustellen wie viele zusätzliche Schnittflächen unterstützt werden, kann man glGetIntegerv mit dem Argument GL_MAX_CLIP_PLANES aufrufen. Als Minimum muss eine Implementation sechs zusätzliche Schnittflächen unterstützen. Da die resultierende Schnittregion die Intersektion der definierten Halb-Räume darstellt, ist sie immer konvex.

glClipPlane beschreibt einen Halb-Raum, der eine vier-Komponenten Flächenentsprechung nutzt. Wenn glClipPlane aufgerufen wird, wird diese Entsprechung mit der inversen Modelansichtsmatrix transformiert und dann in den daraus resultierenden Betrachter-Koordinaten ("Aug-Raum") abgelegt. Darauf folgende Änderungen an der Modelansichtsmatrix haben danach dann keinen Effekt mehr auf die abgelegten Komponenten der Flächenentsprechung. Wenn das Skalarprodukt der Betrachter-Koordinaten eines Eckpunktes und den Komponenten der Flächenentsprechung positiv oder gleich Null ist, dann liegt dieser Eckpunkt "in" dieser Schnittfläche, ansonsten nicht.

Um Schnittflächen zu aktivieren bzw. zu deaktivieren, genügt ein Aufruf von glEnable bzw. glDisable mit dem Argument GL_CLIP_PLANEi, wobei i die Nummer der Schnittfläche angibt.

In der Voreinstellung sind alle Schnittflächen als (0, 0, 0, 0) (in Betrachter-Koordinaten) definiert und deaktiviert.


Beispiel

Ausschnitt aus dem Code:

var Q : PgluQuadric;
    A : array[0..3] of GLfloat;

   A[0] := 0.1; A[1] := 1; A[2] := 1; A[3] := 0.1;
   glEnable(GL_CLIP_PLANE0);
   glClipPlane(GL_CLIP_PLANE0,@A);

   Q := gluNewQuadric;

   glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
   glColor3f(1,1,1);
   gluSphere(Q,1,40,40);
Kugel ohne aktivierte Clipebene Kugel mit aktivierter Clipebene
Kugel LINE.jpg Kugel LINE Clip.jpg

Hinweise

Die symbolischen Konstanten für die Schnittflächen sind fortlaufend nummeriert. GL_CLIP_PLANEi ist also immer gleich GL_CLIP_PLANE0+i;

Normalerweise werden entlang der Schnittkante Polygone so berechnet, dass keine Löcher entstehen. Bei sehr alten, schlecht implementierten Treibern können eventuell Löcher sichtbar sein.


Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn plane kein gültiger Wert ist.

GL_INVALID_OPERATION wird generiert, wenn glClipPlane zwischen einem glBegin und dem passenden glEnd aufgerufen wird.


Zugehörige Wertrückgaben

glGetClipPlane

glIsEnabled mit dem Token GL_CLIP_PLANEi


Siehe auch

glEnable