gluBeginTrim: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (Neuer Artikel. Bilder zur Verdeutlichung wären hilfreich) |
DGLBot (Diskussion | Beiträge) 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 = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
'''gluBeginTrim, gluEndTrim''' - beginnen und beenden eine [[NURBS]] Kurvendefinition. | '''gluBeginTrim, gluEndTrim''' - beginnen und beenden eine [[NURBS]] Kurvendefinition. | ||
− | + | ||
+ | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
procedure '''gluBeginTrim'''(''nobj'': PGLUnurbs); | procedure '''gluBeginTrim'''(''nobj'': PGLUnurbs); | ||
procedure '''gluEndTrim'''(''nobj'': PGLUnurbs); | procedure '''gluEndTrim'''(''nobj'': PGLUnurbs); | ||
− | + | ||
+ | |||
== Parameter == | == Parameter == | ||
<table border=1 rules=all> | <table border=1 rules=all> | ||
Zeile 19: | Zeile 22: | ||
</table> | </table> | ||
− | + | ||
+ | |||
== 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, | + | 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 ''' | + | 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 | + | 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. |
+ | |||
+ | |||
− | |||
== 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);</ | + | gluEndTrim(nobj);</source> |
+ | |||
+ | |||
− | |||
== 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
Inhaltsverzeichnis
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