Du mußt es nicht komplett selbst basteln. Du kannst auch ein beliebiges Fenster verzerren. Im Gegensatz zu einfachen Objekten ist das allerdings ein klein wenig komplizierter. Du brauchst dafür den XFORM-Befehl. Du suchst dir das Fenster, das als rechteckiges deinen Anforderungen entspricht und öffnest es. Speichere es unter einem neuen Namen. Dann mußt du es erstmal analysieren. Gehe in das 3D-Skript und suche (Befehl-F) nach folgenden Befehlsworten:
DEL TOP Hast du einen Treffer, hat es sich der Programmierer leicht gemacht und du mehr Arbeit.
😉 -> Fall B, sonst:
---------------------------
FALL A Gehe im 3D-Skript in die erste Zeile, schaffe mit der Return-Taste Platz und füge ein:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">skxy=10
XFORM 1, tan(skyx), tan(skzx), 0,
tan(skxy), 1, tan(skzy), 0,
tan(skxz), tan(skyz), 1, 0
WALLHOLE 4,1, -a/2,0,7, a/2,0,7, a/2,b,7, -a/2,b,7---------------------------
FALL B Gehe ans Ende des 3D-Skriptes. Kopiere dort folgende Zeilen hin:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">END
! Skew It!
9876:
XFORM 1, tan(skyx), tan(skzx), 0,
tan(skxy), 1, tan(skzy), 0,
tan(skxz), tan(skyz), 1, 0
RETURNSo, nun wieder in die erste Zeile zurück, mit der Return-Taste Platz schaffen und einfügen:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">skxy=10
gosub 9876
WALLHOLE 4,1, -a/2,0,7, a/2,0,7, a/2,b,7, -a/2,b,7Und wegen der Bequemlichkeit der Programmierer mußt du nun über suchen und ersetzen
DEL TOP mit
DEL TOP : GOSUB 9876 ersetzen. (Suche auch mal nach TOP, manchmal sind mehr als 1 Leerzeichen zwischen DEL und TOP).
---------------------------
Was machst du da eigentlich?
Das Schrägstellen wird durch einen besonderen Transformationsbefehl in GDL erzeugt: XFORM. Zur Funktion unten mehr. Dieser stellt das komplette Koordinatensystem schräg. Alles, was eigentlich im bormalen Raum rechtwinklig dargestellt wird, erscheint nun schräge. So eine Art Verzerrung im Raum-Zeit-Kontinuum.
😉 Bei normalen Objekten reicht es diesen Befehl zu Beginn des Objektes einzugeben und das war es.
Der Neigungsgrad der Y-Achse zur X-Ache wird über den Wert von
skxy gesteuert. Du kannst ihn als Parameter anlegen um beliebige Neigungen zu erzeugen.
Aber da, es sich um ein Fenster handelt, mußt du noch die Öffnung schräg stellen. Wenn in einem Fensterobjekt
kein WALLHOLE-Befehl steht, wird die Öffnung in der Wand
VOR dem Aufruf des Skriptes eingeschnitten. Ist ein WALLHOLE im Skript, bestimmt der WALLHOLE-Befehl die Öffnung. Da vor dem Aufruf des Skriptes AC nichts von dem XFORM-Befehl weiß, wird die Öffnung rechtwinklig eingeschnitten, also muß die Öffnung 'manuell' nachgeschnitten werden. Ich habe das hier im Beispiel sehr einfach gemacht. Ohne Anschläge und ohne Nominalmaß=Architekturlichte. Ist aber alles machbar, aber Aufwand.
And least: Alle Transformationen im Skript werden auf einem Stapelspeicher gesichert. Dieser kann einzeln (z.B. mit DEL 2) gelöscht werden. DEL TOP löscht alles. Und deswegen Fall 2: Jedesmal, wenn alle Transformationen gelöscht werden, muß auch de Verzerrung wieder ausgeführt werden. Deswegen die Subroutine. Einfache Fenster sollten aber kein DEL TOP enthalten.
Das ganze ist inspiriert aus einem erleuchtenden Beitrag von Karl Ottenstein im GDL-Talk der GDL-Alliance im Juli 2001. Im Frühjahr hatte ich eine
Kurzbeschreibung zum XFORM-Befehl geschrieben. Zum Gedankenaustausch habe ich Karl kontaktiert, der ebenfalls einen Artikel dazu geschrieben hatte und bereits ein Demoobjekt dazu programmiert hat. Es ist nun auf
openGDL verfügbar, nebst seiner (englischen) Beschreibung, die noch viele andere Möglichkeiten aufzeigt.