gluBeginTrim: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Neuer Artikel. Bilder zur Verdeutlichung wären hilfreich)
 
K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.)
 
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= gluBeginTrim, gluEndTrim =
 
= gluBeginTrim, gluEndTrim =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
 
'''gluBeginTrim, gluEndTrim''' - beginnen und beenden eine [[NURBS]] Kurvendefinition.
 
'''gluBeginTrim, gluEndTrim''' - beginnen und beenden eine [[NURBS]] Kurvendefinition.
  
<br>
+
 
 +
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
 
  procedure '''gluBeginTrim'''(''nobj'': PGLUnurbs);
 
  procedure '''gluBeginTrim'''(''nobj'': PGLUnurbs);
 
  procedure '''gluEndTrim'''(''nobj'': PGLUnurbs);
 
  procedure '''gluEndTrim'''(''nobj'': PGLUnurbs);
  
<br>
+
 
 +
 
 
== Parameter ==
 
== Parameter ==
 
<table border=1 rules=all>
 
<table border=1 rules=all>
Zeile 19: Zeile 22:
 
</table>
 
</table>
  
<br>
+
 
 +
 
  
 
== Beschreibung ==  
 
== Beschreibung ==  
 
Mit '''gluBeginTrim''' markiert man den Beginn einer Schnittkurve, mit '''gluEndTrim''' entsprechend das Ende.  
 
Mit '''gluBeginTrim''' markiert man den Beginn einer Schnittkurve, mit '''gluEndTrim''' entsprechend das Ende.  
  
Eine '''''Schnittkurve''''' (engl: trimming loop) ist ein Satz von orientierten (gerichteten) Kurvensegmenten (bilden eine geschlossene Kurve/Krümmung) welche die Grenzen einer [[NURBS]]-Fläche definieren. Die Schnittkurven werden zwischen [[gluBeginSurface]] und [[gluEndSurface]] aufgerufen. <br>
+
Eine '''''Schnittkurve''''' (engl: trimming loop) ist ein Satz von orientierten (gerichteten) Kurvensegmenten (bilden eine geschlossene Kurve/Krümmung), welche die Grenzen einer [[NURBS]]-Fläche definieren. Die Schnittkurven werden zwischen [[gluBeginSurface]] und [[gluEndSurface]] aufgerufen. <br>
 
''Um den Sinn dieser Schnittkurven zu verstehen, muss man wissen, dass die NURBS-Flächen potentiell unendlich groß sind. Erst durch Schnittkurven wird den NURBS-Flächen eine endliche Form (z.B. ein Rechteck) gegeben. Durch die Schnittkurven kann man somit "Überschuss" wegschneiden und "Löcher" ausschneiden.''
 
''Um den Sinn dieser Schnittkurven zu verstehen, muss man wissen, dass die NURBS-Flächen potentiell unendlich groß sind. Erst durch Schnittkurven wird den NURBS-Flächen eine endliche Form (z.B. ein Rechteck) gegeben. Durch die Schnittkurven kann man somit "Überschuss" wegschneiden und "Löcher" ausschneiden.''
  
  
NURBS-Flächen können beliebig viele Schnittkurven enthalten. Wenn man z.B. eine NURBS-Fläche haben möchte die einem Rechteck ähnelt aus dem ein kreisförmiges Loch gestanzt wurde, brauch man 2 Schnittkurven. Die erste gibt der Fläche die Rechteckige Form. Die zweite schneidet das Loch aus der Restfläche. Die Definition für jede der beiden Schnittkurven würde durch ein '''gluBeginTrim'''-'''gluEndTrim'''-Paar eingefasst werden.
+
NURBS-Flächen können beliebig viele Schnittkurven enthalten. Wenn man z.B. eine NURBS-Fläche haben möchte die einem Rechteck ähnelt aus dem ein kreisförmiges Loch gestanzt wurde, braucht man 2 Schnittkurven. Die erste gibt der Fläche die rechteckige Form. Die zweite schneidet das Loch aus der Restfläche. Die Definition für jede der beiden Schnittkurven würde durch ein '''gluBeginTrim'''-'''gluEndTrim'''-Paar eingefasst werden.
  
  
Zeile 35: Zeile 39:
  
  
Durch die Schnittkurve wird die NURBS-Fläche in zwei Bereiche geteilt. Der eine ist sichtbar, der andere wird verworfen. Der '''sichtbare Bereich''' ist der, welcher '''Links von der Schnittkurve''' liegt, wenn man der Kurve folgt (ansteigende Kurvenparameter). Folglich liegt der Rest der NURBS Fläche innerhalb einer CCW Schnittkurve und außerhalb einer CW Schnittkurve. (CCW = Counter Clock Wise = Gegen den Uhrzeigersinn; CW = Clock Wise = Im Uhrzeigersinn)
+
Durch die Schnittkurve wird die NURBS-Fläche in zwei Bereiche geteilt. Der eine ist sichtbar, der andere wird verworfen. Der '''sichtbare Bereich''' ist der, welcher '''links von der Schnittkurve''' liegt, wenn man der Kurve folgt (ansteigende Kurvenparameter). Folglich liegt der Rest der NURBS Fläche innerhalb einer CCW Schnittkurve und außerhalb einer CW Schnittkurve. (CCW = Counter Clock Wise = Gegen den Uhrzeigersinn; CW = Clock Wise = Im Uhrzeigersinn)
  
Für das oben angesprochene Rechteck heißt dies: Die Schnittkurve welche die Rechteckform herstellt ("den Überschuss abscheidet") verläuft gegen den Uhrzeigersinn. Die Schnittkurve welche das Loch ausschneidet ("ausstanzt") läuft im Uhrzeigersinn.
+
Für das oben angesprochene Rechteck heißt dies: Die Schnittkurve welche die Rechteckform herstellt ("den Überschuss abscheidet") verläuft gegen den Uhrzeigersinn. Die Schnittkurve, welche das Loch ausschneidet ("ausstanzt"), läuft im Uhrzeigersinn.
  
  
Wenn mehrere Kurvensegmente zu einer Schnittkurve zusammengestellt werden sollen, muss sichergestellt sein, dass die Segmente eine geschlossene Kurve bilden. (Das heißt der Startpunkt der (i+1)ten Kurve ist gleich dem Endpunkt der (i)ten Kurve, und der Endpunkt der letzten Kurve ist gleich dem Startpunkt der ersten Kurve.) Wenn die Start- und Endpunkte ausreichend nahe bei einander sind (aber nicht gleich) werden sie zusammen gezogen. Liegen die entsprechenden Punkte zuweit auseinander, wird ein Fehler ausgelößt. (siehe [[gluNurbsCallback]])
+
Wenn mehrere Kurvensegmente zu einer Schnittkurve zusammengestellt werden sollen, muss sichergestellt sein, dass die Segmente eine geschlossene Kurve bilden. (Das heißt der Startpunkt der (i+1)-ten Kurve ist gleich dem Endpunkt der (i)-ten Kurve, und der Endpunkt der letzten Kurve ist gleich dem Startpunkt der ersten Kurve.) Wenn die Start- und Endpunkte ausreichend nahe beieinander sind (aber nicht gleich) werden sie zusammengezogen. Liegen die entsprechenden Punkte zuweit auseinander, wird ein Fehler ausgelößt. (siehe [[gluNurbsCallback]])
  
  
 
Wenn eine Schnittkurve aus mehrere Kurven besteht, muss die Orientierung für alle Teilkurven gleich sein. (d.H. die Innenseite liegt links von allen Kurven)
 
Wenn eine Schnittkurve aus mehrere Kurven besteht, muss die Orientierung für alle Teilkurven gleich sein. (d.H. die Innenseite liegt links von allen Kurven)
  
Geschachtelte Schnittkurven sind zulässig solange die Orientierung der Kurven korrekt wechselt (alterniert).  
+
Geschachtelte Schnittkurven sind zulässig, solange die Orientierung der Kurven korrekt wechselt (alterniert).  
  
 
Schnittkurven dürfen weder sich selbst noch andere Schnittkurven schneiden. (Anderenfalls wird ein Fehler ausgelöst)
 
Schnittkurven dürfen weder sich selbst noch andere Schnittkurven schneiden. (Anderenfalls wird ein Fehler ausgelöst)
  
  
Wenn für eine NURBS-Fläche keine Schnittkurven definiert wurden wird die Fläche komplett gezeichnet.
+
Wenn für eine NURBS-Fläche keine Schnittkurven definiert wurden, wird die Fläche komplett gezeichnet.
 +
 
 +
 
  
<br>
 
 
== Beispiel ==
 
== Beispiel ==
 
Die folgenden Befehle rendern eine Schnittkurve bestehend aus einer stückweise linearen Kurve und 2 [[NURBS]]-Kurven:
 
Die folgenden Befehle rendern eine Schnittkurve bestehend aus einer stückweise linearen Kurve und 2 [[NURBS]]-Kurven:
  
<pascal>gluBeginTrim(nobj);
+
<source lang="pascal">gluBeginTrim(nobj);
 
   gluPwlCurve(..., GLU_MAP1_TRIM_2);
 
   gluPwlCurve(..., GLU_MAP1_TRIM_2);
 
   gluNurbsCurve(..., GLU_MAP1_TRIM_2);
 
   gluNurbsCurve(..., GLU_MAP1_TRIM_2);
 
   gluNurbsCurve(..., GLU_MAP1_TRIM_3);
 
   gluNurbsCurve(..., GLU_MAP1_TRIM_3);
gluEndTrim(nobj);</pascal>
+
gluEndTrim(nobj);</source>
 +
 
 +
 
  
<br>
 
 
== Siehe auch ==
 
== Siehe auch ==
 
[[gluBeginSurface]], [[gluNewNurbsRenderer]], [[gluNurbsCallback]], [[gluNurbsCurve]], [[gluPwlCurve]]  
 
[[gluBeginSurface]], [[gluNewNurbsRenderer]], [[gluNurbsCallback]], [[gluNurbsCurve]], [[gluPwlCurve]]  
  
 
[[Kategorie:GLU|BeginTrim]]
 
[[Kategorie:GLU|BeginTrim]]

Aktuelle Version vom 10. März 2009, 19:21 Uhr

gluBeginTrim, gluEndTrim

Name

gluBeginTrim, gluEndTrim - beginnen und beenden eine NURBS Kurvendefinition.


Delphi-Spezifikation

procedure gluBeginTrim(nobj: PGLUnurbs);
procedure gluEndTrim(nobj: PGLUnurbs);


Parameter

nobj Spezifiziert das NURBS Objekt (erstellt mit gluNewNurbsRenderer).



Beschreibung

Mit gluBeginTrim markiert man den Beginn einer Schnittkurve, mit gluEndTrim entsprechend das Ende.

Eine Schnittkurve (engl: trimming loop) ist ein Satz von orientierten (gerichteten) Kurvensegmenten (bilden eine geschlossene Kurve/Krümmung), welche die Grenzen einer NURBS-Fläche definieren. Die Schnittkurven werden zwischen gluBeginSurface und gluEndSurface aufgerufen.
Um den Sinn dieser Schnittkurven zu verstehen, muss man wissen, dass die NURBS-Flächen potentiell unendlich groß sind. Erst durch Schnittkurven wird den NURBS-Flächen eine endliche Form (z.B. ein Rechteck) gegeben. Durch die Schnittkurven kann man somit "Überschuss" wegschneiden und "Löcher" ausschneiden.


NURBS-Flächen können beliebig viele Schnittkurven enthalten. Wenn man z.B. eine NURBS-Fläche haben möchte die einem Rechteck ähnelt aus dem ein kreisförmiges Loch gestanzt wurde, braucht man 2 Schnittkurven. Die erste gibt der Fläche die rechteckige Form. Die zweite schneidet das Loch aus der Restfläche. Die Definition für jede der beiden Schnittkurven würde durch ein gluBeginTrim-gluEndTrim-Paar eingefasst werden.


Schnittkurven selbst können aus beliebig vielen Kurvensegmenten bestehen. Es gibt 2 verschiedene Kurvensegmenttypen: Stückweise lineare Kurvensegmente werden mittels gluPwlCurve definiert, einfache NURBS-Kurvensegmente mittels gluNurbsCurve. Die beiden genannten Aufrufe (gluPwlCurve und gluNurbsCurve) sind gleichzeitig die einzigen GLU-Befehle die innerhalb einer Schnittkurvendefinition (also zwischen gluBeginTrim und gluEndTrim) erlaubt sind.


Durch die Schnittkurve wird die NURBS-Fläche in zwei Bereiche geteilt. Der eine ist sichtbar, der andere wird verworfen. Der sichtbare Bereich ist der, welcher links von der Schnittkurve liegt, wenn man der Kurve folgt (ansteigende Kurvenparameter). Folglich liegt der Rest der NURBS Fläche innerhalb einer CCW Schnittkurve und außerhalb einer CW Schnittkurve. (CCW = Counter Clock Wise = Gegen den Uhrzeigersinn; CW = Clock Wise = Im Uhrzeigersinn)

Für das oben angesprochene Rechteck heißt dies: Die Schnittkurve welche die Rechteckform herstellt ("den Überschuss abscheidet") verläuft gegen den Uhrzeigersinn. Die Schnittkurve, welche das Loch ausschneidet ("ausstanzt"), läuft im Uhrzeigersinn.


Wenn mehrere Kurvensegmente zu einer Schnittkurve zusammengestellt werden sollen, muss sichergestellt sein, dass die Segmente eine geschlossene Kurve bilden. (Das heißt der Startpunkt der (i+1)-ten Kurve ist gleich dem Endpunkt der (i)-ten Kurve, und der Endpunkt der letzten Kurve ist gleich dem Startpunkt der ersten Kurve.) Wenn die Start- und Endpunkte ausreichend nahe beieinander sind (aber nicht gleich) werden sie zusammengezogen. Liegen die entsprechenden Punkte zuweit auseinander, wird ein Fehler ausgelößt. (siehe gluNurbsCallback)


Wenn eine Schnittkurve aus mehrere Kurven besteht, muss die Orientierung für alle Teilkurven gleich sein. (d.H. die Innenseite liegt links von allen Kurven)

Geschachtelte Schnittkurven sind zulässig, solange die Orientierung der Kurven korrekt wechselt (alterniert).

Schnittkurven dürfen weder sich selbst noch andere Schnittkurven schneiden. (Anderenfalls wird ein Fehler ausgelöst)


Wenn für eine NURBS-Fläche keine Schnittkurven definiert wurden, wird die Fläche komplett gezeichnet.


Beispiel

Die folgenden Befehle rendern eine Schnittkurve bestehend aus einer stückweise linearen Kurve und 2 NURBS-Kurven:

gluBeginTrim(nobj);
   gluPwlCurve(..., GLU_MAP1_TRIM_2);
   gluNurbsCurve(..., GLU_MAP1_TRIM_2);
   gluNurbsCurve(..., GLU_MAP1_TRIM_3);
gluEndTrim(nobj);


Siehe auch

gluBeginSurface, gluNewNurbsRenderer, gluNurbsCallback, gluNurbsCurve, gluPwlCurve