Okay. Ja, guten Morgen. Ich hoffe,
Sie hatten ein schönes Wochenende. Ich habe heute gebeten,
dass wir Stadt ist regulären Übungstermins da drüben, uns nochmal hier treffen.
Das sind, hat einfach den folgenden Grund. Wir haben in der Vorlesung
nicht so sonderlich viel durchgenommen, was man üben könnte.
Und ich würde ganz gern einen Teil des Vorlesungsstoffs, den wir brauchen,
damit wir mit den Übungen anfangen können, hier vorziehen.
Also alles, was mit Koordinaten,
Transformationen und so zu tun hat und dann heute in der
zweiten Hälfte dieses Übungsblocks nochmal darauf eingeht,
wie man das alles zusammenbringt mit der Programmiersprache,
die wir benutzen werden
Lulana wird dann in seinem Vorlesungsteil anschließend drauf aufbauen,
mit einem elementaren Modellieren beginnen. Dass wir dann hoffentlich nächste
Woche tatsächlich uns dienstags zu dieser Zeit drüben treffen können und
wirklich anfangen können, das alles mal im Rechner auszuprobieren.
Nächsten Montag, ja. Genau, gut.
Okay. Also ich werde diesen Teil für diejenigen,
die die Übungen späten Nachmittag haben,
dann schlicht verkäuft ein zweites Mal wiederholen.
Also für diesen Teil dann
sehr viele Chancen,
das nochmal mitzukriegen
Gucken wir mal gerade, wo wir das letzte Mal aufgehört hätten.
Wir haben ja drüber gesprochen, wie wir Transformationen angeben.
Also erst 2D-Koordinatensysteme gesehen. Da haben wir nicht für Freiheiten,
Gritationen. Alles so sind Dinge, die eindeutig sind.
Wir haben über 3D-Koordinatensysteme gesprochen. Die Händigkeitshilfs-Eheselsbrücken kennengelernt,
um zu entscheiden, wie Rübenrotationen denn gehen.
Die ersten Transformationen angesprochen. Und irgendwo in diesem Teil 3D-Transformationen waren wir
stecken geblieben. Ich möchte jetzt an einigen Beispielen zeigen,
wie wir das tatsächlich in Popofray benutzen können,
um zum praktischen Teil zu kommen.
Gucken wir noch mal hier auf die 3D-Transformation.
Irgendwo, da hatten wir das letzte Mal aufgehört.
Die verschiedenen Koordinaten-Systeme. Ja, genau. Ach,
vielleicht kommen wir an der Stelle. Einfach wieder aufsetzen und
da weitermachen. Was wir gesehen hatten, ist,
dass wir Objekte modellieren können, indem wir Statements angeben,
wir einfach das Vier oder ähnliches und deklarieren damit das Modell einer Kugel.
Und wenn wir dann im Programm später Objects sagen,
mit Koordinaten, mit Farben, mit weiteren Parameter,
dann können wir es zu unserer Szene also an beliebigen Stellen hinlegen.
Wir haben das letzte Mal uns auch schon im Übungsteil des
Skriptes ganz hinten angeschaut, über elementare Komponenten beschreiben können.
Was Sie kennen, sollten wir erstens, wie mache ich
eine Kugel? Zweitens, wen mache ich einen Zylinder?
Nicht, da hatten wir gesehen, Notation. Mittelpunkte der
beiden Deckel des Zylinders angeben. Und damit können wir dann
zum Beispiel diese Achsen hier bauen. Wir haben Kegel kennengelernt,
die Kegel in Pofrey, die konnten wir hier oben auch abschneiden,
haben sollten, brauchen wir oben einen Radius von null.
Das heißt also über Kegel, Zylinder, Kugeln können wir dies Bild komplett zusammenbauen.
Bis auf eine Kleinigkeit, hier die Achsenbeschriftung,
dessen Kapitel für sich, dann werden wir später drüber reden,
weil das ist ziemlich systemabhängig, wenn man Schriften da reinkriegt.
Und Schriften als Werkmodelle. Also da wird jeder auf seinem Rechner,
wo er rechnet, ehrlich gesagt zusehen,
müssen wir das hinkriegt, TTF-Fonds installiert und sieht,
wie man Schriften generiert.
Deshalb lassen wir
das Kapitel erstmal außen vor
Gut, wenn wir jetzt ein Objekt hätten,
hatten wir gesehen, okay, mit dem Translate können wir XYZ,
das an irgendeine Position im 3D packen.
Und da ist es dann und damit eben die vielen Kugeln machen,
wie in dem Bild. Weitere Auffrischung der Erinnerung,
YXZ, das sind vordefinierte Einheitsvektouren,
die wir in arathmetischen Ausdrücken einfach so verwenden können,
um Verschiebungen entlang der Hauptwachse und das Koordinatensystem hinzukriegen.
Unsere Szene von eben
Soll ich den Matritzen nochmal zeigen?
Eigentlich sollten wir sie kennen, ne? Das,
was wir gesehen haben im 3D an den wichtigsten Transformationen,
die sie bis zur Prüfung auch wirklich auswendig kennen sollten.
Ja, das sind die, diese affinen Transformationen.
Sie sollten wissen, wie kriegen wir denn eine Translation hin,
dass wir unten der Translationsvektor in der 4D Matrix stehen muss.
Sie sollten wissen, wie man Skalierungen hinkriegt,
dass wir unsere Skalierungsfaktor nett entlang der Hauptdiagonale arrangieren,
XYZ und dann mit einer Skalierung ausdrücken können
Und den Unterschied zwischen Uniformer und Ungleichformiger Skalierung,
ist wir entweder hier überall denselben Faktor haben,
dann wird das Ding einfach in alle Richtungen gleichmäßig größer oder eben unterschiedliche.
Und den Sinn und Zweck, der zusammengesetzten Transformation,
das haben wir das letzte Mal auch besprochen,
also auch das ist mir sehr wichtig,
weil sie das für die Übung hier stets und ständig brauchen.
Wenn wir ein Objekt skalieren wollen,
der steht an beliebiger Stelle in der Szene, das ist so unkooperativ,
dass sie sich nicht genau wachsen parallel ausgerichtet in den Ursprung stellt,
dann müssen wir es eben dahin bringen mit List und Tücke.
Das heißt, dahin eine Transformation genau dahin mal in der richtigen Orientierung.
In dem Beispiel, wenn nur der Mittelpunkt anders ist,
Translation zurück, in den negativen Weg dort,
dann die Skalierungsmatrix, dann die Transformation.
Und um das Matrizenrechnen nochmal aufzufrischen für diejenigen, die meinen,
dass sie damit nicht so ganz sattelfest sind,
es ist eine schöne Übung.
Tatsächlich mal raus, das hier auszurechnen und zu sehen,
ob man tatsächlich bei dieser Matrix landet.
Gut. 3D-Rotation
Die verschiedenen Händigkeiten hätten wir kennengelernt, da gehe ich jetzt mal drüber weg.
Also die Rotationsmatrix, Rotation um XYZ. Auch die sollten sie
wissen, wie man die beiden anderen aus einer generiert.
Und wir hätten am Ende der letzten Vorlesung noch eine kleine Diskussion,
welche der verschiedene Transformationen, denn du whole pitch and your heißen.
Also es ist schlichtweg so, das wird in den verschiedenen Büchern verschieden benannt.
Und in dem Fall überlasse ich es schlichtweg.
Ihre Präferenz für Ihr Lieblingsbuch oder Ihre Lieblingsweb-Pitch,
für welche der Ruhefitch-Joa sie sich entscheiden, in welcher Definition.
Also ich werde es in der Prüfung nicht in Not abstufen,
wenn ich meine Definition neben mir.
Das ist schlichtweg. In den Rabattikbüchern, nachdem ich gelernt habe,
stets dummerweise so wie in meinem Skript, aber ich habe gesehen,
im Web setzt sich inzwischen eine sekundäre Meinung durch.
Okay, danke, dass du es gezeigt hast. Okay,
also alle Matrizen, die wir kennengelernt hatten,
haben wir gesehen, sind viermal vier und solange sie affin sind,
Ist die vierte Spalte der 4D-Einheitszwecktur mit einer Einzieher.
Und wenn Sie jetzt solche Transformationsmatrizen direkt in Parfum angeben wollen,
dann Schnüsselwort Matrix. Und dann aus jeder Zeile die ersten
drei Werte aufzählen, die vierte Spalte wird automatisch ergänzt.
Zu 001. Gut, wir hatten mit den Scherungen aufgehört.
Und gesehen, dass wir animieren können,
wenn wir in der Scherungsmatrix hier irgendwo unsere Clock-Variable einsetzen.
Ja, nochmal zur Erinnerung, Clock ist in Bafrey, eine.
Variable, die gesetzt wird bei jedem Durchgang durchs Bild.
Also wenn wir einen Film von einer Minute machen wollen,
dann sagen wir, unser Film soll 300 Bilder haben oder so.
Und auf diese 300 Bilder wird die Uhrzeit verteilt auf die Werte von 0 bis 1. Ja,
wenn wir jetzt, also etwas für das erste Bild der Szene ausrechnen wollen,
können wir damit rechnen, dass die Variable Glocktin Wert 0 hat,
das letzte Bild der Szene Sinnwert.
Eins in der Zwischen wird linear interpoliert für all
die Bilder,
die wir erzeugen
Für jedes Bild, was gerechnet wird, das ist nur die Eigenschaft des Gerb-Prittes,
wird unser Pfeil von Anfang bis Ende wieder gelesen.
Also der merkt sich nicht von Durchgang zu Durchgang,
was habe ich im Durchgang davor gemacht,
sondern die für jedes Bild wird der Pfeil neu von Anfang an gelesen.
Und wenn wir programmieren und uns irgendetwas merken wollen,
was beim nächsten Durchgang berücksichtigt werden soll aus unseren vorherigen Berechnungen,
da muss man sich was einfallen lassen, dass das irgendwo steht,
wo es beim Durchgang bis nächste Bild gelesen wird.
Also es ist nichts, jedes Bild wird für uns zunächst einmal
neu von Anfang an gerechnet, als gäbe es die anderen nicht.
Das einzige, was wir wissen, ist der Wert der Variablen Klock.
Und wenn wir etwas anders machen wollen zu einem anderen Zeitpunkt,
basierend auf vorherigen,
dann wird zum Beispiel eine Möglichkeit jetzt in Abhängigkeit von Klock zu programmieren,
welche falls wir denn dazuladen, über das Include-Statement.
Gut, das sind aber Sachen, über die wir dann noch reden werden.
Jedenfalls Klopp ist unser einziger Hinweis auf die Animation,
dass wir zu einem bestimmten Zeitpunkt das Bild anders berechnet bekommen,
weil es zu einem anderen, wenn die Uhr einen anderen Wert hat.
Und natürlich ist es wie bei den Koordinatensystemen.
Wir haben es dann über die Koordinatensysteme gesprochen und haben gesagt,
wir werden vermutlich gerne uns auf Weltkoordinatensysteme beziehen,
auf Objektkoordinatensysteme und so weiter.
Für ihre Animationen kann es sinnvoll sein,
dass sie auch domänenbezogene eigene Uhren definieren.
Also Programme werden sich ziemlich krauzlich lesen,
wenn sie an jeder Stelle die Clockvariable direkt benutzen
Und alles auf Zeiten zwischen 0 und 1 normiert, behandeln.
Vermutlich werdet ihr Programm sinnvoller sein, wenn sie sagen,
ja, ich habe meine bürgerliche Uhrzeit bezogen auf die und
die Zeitzone, was weiß ich.
Und ihre eigene Uhr läuft von 0 bis 24 für Stunden,
sodass sie leicht entscheiden können, was ist morgens,
was ist abends in ihrer Szene.
Und sie sollten als erstes für ihre Welt anfangen,
sich Stützfunktionen zu definieren, die ihre eigene Uhr auf die Glocke abbilden.
Das liegt alles genau an der Stelle geschieht,
wo hier die Glocke genommen wird,
für simple Animationen.
Nur zuschreiben sie sie einfach dahin
Das war, ja, wir hatten wir einfach mit der Transformation
eben die Scherung gemacht, ein Objekt, die Form verändern lassen.
Okay. Und so Koordinaten-Transformationen, das ist ein Thema,
wo ich gern heute weitermachen möchte. Und bei der Gelegenheit
schauen wir auch immer drauf, wie wollen wir es denn anschließend programmieren?
In der eigentlichen Vorlesung am Mittwoch möchte ich nicht so gern
über all die Tücken des Programmierens in der bestimmten Sprache reden,
sondern in der Lage sein,
dass sich da über die Konzepte direkt rede.
Ja, unabhängig davon, in welcher Sprache wir es modellieren.
Aber in diesem Teil möchte ich gern doch darauf eingehen,
wie wir es so praktisch machen können in der Sprache,
die wir verwendet haben.
Also wir gucken uns jetzt nochmal an, wie machen wir
affine Transformationen in Pofrey? Wie machen wir Koordinatentransformationen und als Übung?
Es wird ja bald Winter, also überall sind schon Weihnachtsdekos,
üben wir dann mal virtuell einen Schneemann zu bauen. Also Eine Sicht,
um das mit den Transformationen zwischen den Koordinatensystemen gut hinzukriegen,
das ist genau das,
was nicht in meiner Studienzeit ja eine Robatikvorlesung gelernt habe und diejenigen von ihnen,
die Robotik machen wahrscheinlich auch da schon gehört haben.
Das ist, wir können Grundoperationen wie Rotationen und so weiter
auch interpretieren als Transformationen in ein anderes Koordinatensystem, bei dem die Achsen anders legen.
Und das letzte Mal, ich glaube, das war unsere letzte Folie,
die hatten wir Wir haben uns angeschaut, wie wir eine Rotation um eine beliebige Achse hinkriegen.
Und die spillen wir jetzt mal ab auf die Frage,
wie krimme ich denn von einem Koordinatensystem ins andere?
Nehmen wir mal an, unser Weltkoordinatensystem, sei dies hier,
wir haben, dass unser Koordinatensystem, nennen wir mal A,
als Konvention, wenn wir Ein Vektoren notieren und sagen wollen,
in welchem Koordinatensystem wir sie meinen,
dann schreiben wir hier links oben so ein so Fix dran.
Also unser, wenn wir ein Koordinatensystem A haben und sagen,
dieser Vektor, hier soll im Koordinatensystem A ausgedrückt sein,
dann entsteht hier oben eben ein kleines A dran.
Für irgendeinen Punkt, also diese Koordinate, der Vektor,
der hier steht,
ist ausgedrückt im Koordinatensystem A. Wir haben ein zweites Koordinatensystem,
das sei verschoben und gedreht
So, und wie ist es verschoben? Einmal um
eine Translation, ja, und einmal um einen Winkel.
Hier ist es um die senkrechte Achse gedreht, Delta.
Dann würden wir in diesem 2D-Fall,
wie es hier gezeichnet ist, sagen können,
die Transformation vom Koordinaten im System A, nach Koordinatensystem B,
können wir durch eine affine Transformation beschreiben.
Und die Transformationsmatrix, die das macht, die hat eine ganz bestimmte Struktur.
Also gegeben einen Punkt ausgedrückt im Koordinatensystem B,
das sei dieses P mit dem B
hier oben
Ja. Und dieser senkrechte Strich soll sagen, in homogenen Koordinaten,
das Teil sei auch noch normiert auf vierte Koordinate 1. So.
Den können wir umrechnen in unser eigenes Koordinatensystem A,
in denen wir diesen Punkt B multiplizieren, mit der Koordinatentransformationsmatrix.
Und die ist ganz systematisch aufgebaut. Zum einen die vierte
Spalte ist wieder unser Einheitsvektor mit einer 1 in der vierten Dimension.
Die letzte Zeile
Ist der Translationsvektor, der das Koordinatensystem von A nach B verschiebt,
also die relative Lage von B zu A,
erscheint hier unten als Translationsvektor.
Und dieser Teil hier, 3x3-Drei-Teil, das ist die Rotationsmatrix,
die die Drehung ausdrückt, von Koordinaten ausgedrückt,
ja die Drehung von B,
relativ zum Koordinatensystem A.
Das steht hier drin
Formen. Eine Koordinatentransformation auszudrücken, ist in der Robotik unglaublich beliebt,
weil wir damit nämlich sehr leicht ausrechnen können,
wenn wir einen Roboter haben, der Teile zusammensetzen soll und Drehgelenke hat.
Ja, wir müssen ja, um rauszukriegen,
wo ist denn nur die Hand meines Roboters,
entlang aller Gelenke von der Schulter bis zum Handgelenk,
ausrechnen, welche Drehungen wir haben und welche Translationen.
Und das ist also eine Aufgabe,
die man stets und ständig machen muss in der Robotik,
genau diese Transformation in der kinematischen Kette durchzurechnen.
Und wir können Dann für jedes Teil für jeden Abschnitt des Roboteramts schlichtweg die Lage relativ zu den vorherigen Ausdrücken,
indem wir die Position speichern durch einen solchen Frame,
also in der Robotik heißt so eine Matrix Frame,
hat also die doppelte Funktion beschreiben,
wie liegt das Teil relativ zu den vorherigen?
Wie liegen die Koordinatensysteme zueinander? Und gleichzeitig ist diese Beschreibung
auch der Operator. Die Transformationsmatrix, die von einem Teil
ins andere umrechnet. Ja, also wenn man jetzt vor
der Aufgabe steht, man möchte etwas modellieren.
Dann uns überlegt,
wie komme ich dahin
Dann kann ein einfacher Weg sein,
dass man einfach die beiden Teile, die man hat,
vorher nachher hinschreibt und dann direkt aus den Unterschieden abgliest.
Welche Transformation brauche ich, um von da nach da zu kommen? Sehen,
aha, das ist die Verschiebung für den Ursprung und das
hier ist die Rotationsmatrix gedreht, um Winkel, Delta, Maxibe.
So, in dem Beispiel von eben sehe die Matrix dann so aus,
ich denke mal,
das hätten alle aus dem Kopf sogar hingekriegt anhand des Bildes,
weil alles Zahlen sind, die man aus der Mittelstufe Oberschule kennt.
So sei das hier Der Punkt, ein Punkt,
den wir transformieren wollen, ja,
die Translation von hier nach hier ist sehr viel länger in X als in Y.
Und der Winkel, in dem wir hier drehen,
seit 30 Grad. So, sehr viel länger X,
als in Y. Ich habe hier mal nur so als Schätzung eingesetzt,
10 in X. Null in Y, 5 in Z,
was auch immer, das sei die Verschiebung.
Und hier steht unsere Rotationsmatrix. Erinnern wir uns bei
der Rotationsmatrix
Drehung um die Z-Achse, haben wir oft der Diagonalen,
den Cosinus des Drehwinkels und auf der Nebendiagonalen.
Den Sinus und den Minus-Sinus. Und daher ist ein Tipp Fehler.
Sehe ich zum ersten Mal. Also wenn ihr sie noch
Tippfehler sehen irgendwo, nur zu schicken sie mir eine E-Mail,
es ist hoffentlich in der nächsten Auflage des Skriptes weg, ja?
Okay, also das sie musste auch 0,5 heißen, nicht 0.05. Okay.
Ja. Sinus 30 Grad ist ein Hype, das weiß man auswendig.
Vielleicht nicht mehr, dass der Posinus von 60 Grad,
das ist, aber man kann es dann leicht hinkriegen,
einfach über die Regel.
Cosinus ist Wurzel aus 1-Sinus-Cinus-Quadrat. Und dann ist man auch da.
Kleine Warnung an die Lehramtskandidaten hier, falls wir welche dabei haben.
CGW ist immer, oder IVC, auch eine beliebte Prüfung für Lehramtskandidaten.
Aber da ist die Prüfung ja nicht so gemütlich wie hier bei uns,
einfach Klausur aus Prüferbeisitzer und vielleicht Zuhörer oder auch nicht,
sondern im leerer Prüfungsamt
Wenn da eine solche Vorlesung geprüft wird, sitzt eine Herrschar von Lehrern dabei.
Ja? Weil wer das schon erlebt hat. Und wenn
nicht da aus Versehen auf die Frage einer Rotationsmatrizen,
komme und so weiter und zufrieden bin,
weil da jemand ziehen muss, 30 Grad reinschreibt.
Die Lehrer, die dabei sitzen wollen, in ausgerechneten Wert sehen.
Da kann man sich drauf verlassen. Also die sagen,
was, wenn sie das nicht mal wissen, sie wollen,
dass den Schülern beibringen, wie soll das gehen, ja?
Also nur als kleine Warnung, dass da,
wo Schulwissen gebraucht wird bei diesen Lehramtsprüfungen,
die Lehrer, die dabei sitzen,
unglaublich pikieren
Sind, wenn man das, was man den Schülern beibringen soll,
in dem und dem der Jahrgangsstufe nicht selbst auch auswendig weiß.
So, ach gut, also was wir jetzt gesehen haben an dieser Matrix,
ist, dass unsere Transformation den doppelten Zweck erfüllen können.
Einmal beschreibt für die Koordinaten von Systemen B in A gewandelt
werden und zweitens Lage und Orientierung relativ zu Systemen A. Ja,
wie Leaks, Koordinatensystem B relativ zu A,
wir können es direkt in der Matrix sehen.
Und genau dafür verwenden wir es auch. Also quer Durch
Java 3D finden wir genau an den Knoten des Szenengrafen.
Diese Matrizen, die ich eben gezeigt habe, wer liegt,
das Objekt relativ zu dem davor. Okay,
und in der Robotik, da ist es mir zum ersten Mal begegnet,
da heißt es so ein paar aus Translation, Transformation, schlichtweg Frame.
Das ist was anderes als sonst in der KI mit Frame gemeint,
das bei sonst in der Kunst in Intelligenz und Frame.
Eine Bestelle, eine bestimmte Art der Wissensrepräsentation,
aber in der Robotik meint das die relative Lage von Teilen
in der klimatischen Kette
Und die klassischen Roboter, Bauformen, die wir kennen,
wo das wichtig ist,
da kann man sich es vielleicht sogar ganz gut vorstellen,
sind einmal hier so die Basis von den alten IBM-Robotern,
ja, da kann man diese Basis hier drehen und entlang einer anderen Achse haben wir reine Translation.
Also hier haben wir die Rotation, hier die Translation und
dann haben wir hier vielleicht wieder eine Rotation oder diese alten Pumas haben diesen schönen Artikulated-Aufbau.
Nur Rotationsgelenke und alle Translationen muss man dadurch machen,
dass man geschickt rotiert
Diese Bauform hier, wurde es mir zum ersten Mal begegnet,
bei dem Schachspielenden Roboter, der MIT entwickelt wurde.
Das glaube ich gleich, MIT, das Stanford,
ich bin mir nicht mehr ganz sicher.
Aber das Teil hat er entlang dieser Achse.
Weil Translation hätten hydraulik. Also der Roboter,
der hat fast jedes Schachturnier gewonnen, nicht wegen der überragenden Schachspielkünste,
aber einfach der Gegenüber, der wurde am Ende so entnervt,
wenn immer mit Presslof der Arme auf den Zuschuss,
wenn das war ein Psychokrieg pur
Also hier, was meine allerersten Robotikfolie, die behalte ich,
wo ich es halt noch handgezeichnet, mit Stift auf Folie.
Also hier überall diese Translationsgelenke, ja,
dieser konnte entlang an der Bewegungsachsen auf diesem großen Montaget-Tisch nur mit Hydraulik,
nicht mit Pressluft, die Gelenke bewegen,
damit große Lasten verschieben und der Montagekopf hier unten,
der hatte dann drei Drehgelenke.
Der klassische Puma, ich glaube so einen,
der steht bei Tumps immer noch unten im Keller.
Also letztes Jahr habe ich noch so einen,
der rumstehen sehen
Und bei den, diesen Montage-Roboter, ließen die Drehgelenke dann analog zur menschlichen Armen,
Schulter, Ellenbogen, Handgelenk, eine technologische Herausforderung ist,
dass man die Handgelenke meistens so baut, dass man drei Achsen hat,
die sich alle exakt in einem selben Punkt schneiden.
Genau, und das können wir alles durch unsere Matrizen beschreiben.
Und wir nutzen jetzt das Wissen mal über Koordinatentransformationen im Schneemann zu bauen. Von dem,
was ich eben gezeigt habe für die Übung,
ist wichtig, wenn sie ihre eigenen Koordinatensysteme notieren,
ist, dass man sich wirklich frühzeitig daran gewöhnt,
Immer diese Indie-CSA und B dranzuschreiben, also wenn sie etwas aufschreiben,
bitte immer ranschreiben, auf welches Koordinatensystem es sich bezieht.
Und wenn sie Transformationsmatrizen schreiben, auch diese Indizes dran machen,
um klarzumachen, diese Transformation transformiert,
von Systemen A nach B. Wenn wir über Kamera sprechen,
müssen wir das nochmal ganz intensiv so benutzen, aber dran gewöhnen,
dass man einem Vektor an seinen Kennungen sofort ansieht,
in welchem Koordinatensystem er gilt,
sonst gibt es
ein teilloses Chaos
Den Zutaten, die wir jetzt kennen, legen wir mal los.
Wir bauen einen Schneemann. Und als Basis bewährte Technik,
wir nehmen große weiße Kugeln, gehen davon aus,
die liegen an einer Stelle für uns schon bereit und haben eine Einheitsgröße.
Ja, sind eben Kugelgestalt. Da liegen auch schwarze Kugeln
auch ziemlich groß, selbe Einheitsgröße.
Das sollen später die Augen und Knöpfe unseres Schneemanns werdens.
Und wir haben auch noch einen Kegel,
der da schon bereit steht, auch eine Einheitsgröße.
Und dieser Kegel zeigt nach oben,
Orange Schruth und soll später die Nase unseres Schneemanns werden
So, und das müssen wir jetzt alles zusammensetzen mit dem passenden Transformationen.
Gucken wir uns mal an, wie wir es machen können.
Also die Schneemann-Teile, habe ich abgelegt in einem Include-Pfeil,
der heißt Snowman Inc. Und den können wir,
wenn unser Pafri-System so oft gesetzt ist, dass wir Sachen reinziehen,
können wir mit dem Include-Statement lesen, genauso wie die Vordefinierten.
Teile, ja. Und das eben definiert einen mit Diclaire,
ein Objekt Snowball, das wäre jetzt der weiße Schneeball,
den wir da haben, liegen sehen.
So, jetzt wollen wir einen Schnee Eine Schneekugel in
anderer Größe haben, als das, was vordefiniert ist.
Da holen wir also aus diesem Inkludfall uns das Modell,
verwenden es hier und skalieren es. So,
ich habe hier jetzt geschrieben, Scale 50. 50 heißt,
wir skalieren Uniform in alle Richtungen an demselben Faktor.
Also ich hätte auch hinschreiben können, den Vektor,
Klammer, Spitze, Klammer auf, 50, 50,
50, um es deutlicher zu machen.
Aber wenn Uniformen ist, können wir einfach die Zahl reinschreiben.
Und dann verschieben wir es weit weg von der Baustelle
im Ursprung,
wo es liegt
An die Stelle minus 150.0. Oder wir können,
zweite Kugel hier hinsetzen, minus 150, minus 100,
ein Stück Kohle, das skalieren wir um 50,
verschieben wir es.
Und die Karotte machen wir um Faktor 30 Größe.
Also dieser Pfeil hier, das ist genau der,
der den Inklutpfeil eingelesen hat und dieses Bild erzeugt hat.
Wenn Sie das im Skript nochmal kontrollieren,
wie die Objekte arrangiert sind, können Sie mal gucken,
ob die alle an der richtigen Stelle stehen.
Das sind also Basisobjekte
So, jetzt um den Schneemann aus diesen Basisiobjekten aufzubauen.
Wir müssen drei weiße Kugeln stapeln für den Körper.
Die müssen alle senkrecht an derselben XXXXXXXXXXXXE koordinate stehen,
aber unterscheiden sich in Y. Und nach oben werden sie typischerweise kleiner.
Also wenn wir einen gesunden Schneemann haben wollen,
den meisten kleineren Kopf als einen Bauch.
Die Nase, da nehmen wir unseren orangenen Kedl.
Wir haben gesehen, der stand so da. Damit er
nicht hochnäsig wird, müssen wir also seine Nase rotieren,
dass sie nach vorne zeigt.
Und genau in die Mitte
vom Gesicht platzieren
Für die Augen brauchen wir schwarze Kugeln und da sollen wir
auch keine riesen Glubstinger werden, sondern niedliche Kleine.
Und dem sollen möglichst rechts und links der Nase sitzen,
nicht irgendwie wie bei einer Scholle nach einer Seite verschoben.
Also bringen wir die Augen erstmal in die Mitte des Gesichtes.
Ja, stellen wir uns also vor,
hier ist der Gekugel unseres Schneemanns. Wir bringen die Augen,
dass sie genau in der Mitte der Kugel sitzen,
im Gesicht nach vorn, beide übereinander.
So, und jetzt sollen die so angebracht werden,
dass sie genau auf der Oberfläche der Kugel unseres Kopfes sitzen.
Damit wir selbst nicht viel rechnen müssen
Nehmen wir einfach das linke Auge, rotieren es um die Z-Achse nach links.
Der wandert erst auf der Oberfläche des Gesichtes nach links.
Das andere verschieben wir möglichst im gleichen Betrag, auch durch Rotation nach rechts.
Und dann soll es noch ein bisschen nach oben,
rotieren wir wieder, auf diese Weise bleibt,
bleiben die Augen direkt auf der Kugeloberfläche sitzen und wir müssen nicht selbst ausrechnen.
Wo ist denn die Oberfläche der Kugel?
Das ist beim Modellieren immer ein beliebter Trick.
Erst mal in eine Position bringen, wo man leicht hinkommt.
Und wenn man dann auf der Oberfläche von Kugelförmigen Objekten
sich bewegen muss, dass man ab der Rotation verwendet.
Genauso bringen wir die Knöpfe an auf der Brust unseres Schneemanns.
Erst genau in die Mitte oder vielleicht, sagen wir mal,
es ist der Bauchnabel da. Und ab da rotieren wir
die Knöpfe dann auf der Oberfläche der Kugeln nach oben und nach unten.
Also hier erstmal gestapelt unsere drei Kugeln. Können wir wieder Spiel machen,
dass wir das Zimmer geübt haben, auszurechnen,
worum es die Kugel, denn wie muss dieser Mittelpunkt hingegeben,
die Radien der beiden Kugel, damit die sich hier genau berühren.
Genauso beim Kopf. Und dann müssen hier eben auch diesen Kugeln,
Knöpfe verteilt werden, Augen verteilt werden, also verteilt werden.
Um jetzt rechnen zu können, eine kleine Erinnerung an die Syntax mit Variablen.
Es ist günstig, dass für einen Faktor einführen,
der die gesamte Skalierung der Zähne festsetzt.
Und das ist in meinem Beispiel hier die Höhe des Schneemanns.
Ich habe hier als Basisgröße gesagt, unser Schneemann hat 120 Einheiten in die Pofffreie.
Ja, die Dimensionen in Pofffrei beziehen sich Längeneinheiten auf das gesamte Bild,
was erzeugt wird, definiert durch den Öffnungswinkel der Kamera.
Also es hat nichts mit unseren Längen in der realen Welt
zu tun. Und deshalb ist es meistens so,
dass man erst mal ein bisschen experimentiert und sich überlegt,
ja, welches nämlich als Maßstab in meiner Szene,
wie wandert das ins Bild der Kamera und sich dann bei der Modellierung bemüht,
so zu programmieren, dass wenn man dahinterher feststellt,
oben hat alles zu groß gemacht,
dass man nur eine Zahl ändern muss und nicht alle.
Deshalb hier als Basisgröße, die Höhe des Schneemanns 120 Längeneinheiten.
Und jetzt muss man sagen,
wie groß soll der Bauch unseres Schneemanns werden
Also diese Kugel, hier habe ich Belly Bauch genannt,
das hier Breastwurst und dann hier den Kopf, ja?
Also die, auch Kugel,
sagen wir, die soll ein Viertel der Schwemannhöhe ausmachen,
in X und in Y ist er etwas flacher.
Also unser Schneemann ist nicht einheitlich kugelig, sondern breiter als tief.
Und im Set aber dasselbe wie hier in X. Ja,
die Kugel, die die Brustkugel da ist,
die haben ja ein bisschen länglich nach oben gemacht,
0,2 der Schneemannhöhe,
ja,
die in
Etwas flacher, okay. Und der Kopf,
der ist so relativ klein, wenn sie ihn klüger machen wollen,
können sie also den Wert gern etwas ändern.
So. Dann setzen wir unsere Kugeln jetzt in die Szene und beziehen
uns eben auf die Variablen, die wir eingeführt haben.
Und also hier unsere Einheitskugel und dann schlichtweg ins Feel
tragen wir unsere drei Skalierungsfaktoren da rein.
Denn genauso für die Brustkugel und für den Kopf.
Da ist also nichts Geheimnisvolles bei. Eigentlich steht das nur hier,
damit sie sehen, sie können arithmetische Ausdrücke, wie gewohnt in Java schreiben.
Und es gelten dieselben Auswerte-Regeln, wer sie kennen,
dass eben Punktrechnung vor Strichrechnung geht.
Da können sie sich auch drauf verlassen. Genau. Und
jetzt müssen die Knöpfe und die Nase da angebracht werden.
Also gucken wir nochmal auf die drei Knöpfe hier auf der Brust.
Die habt ihr schon gesagt, die sollen nicht frei im Raum
vor der Kugel schweben. Wir müssen also genau ausrechnen,
wo ist die Oberfläche der skalierten Kugel.
Und deshalb macht es Sinn, die Knöpfe anzubringen,
solange das Ding noch nicht skaliert ist
Ja, vorher,
dass sie genau auf der Oberfläche der Kugel sitzen und wir
tun sie zuerst genau an diese Stelle und drehen sie von
den unteren Knopfen mit einer Rotation um den Mittelpunkt der Kugel
ein Stück nach unten und den anderen vom Mittelpunkt der Kugel ein Stück nach oben.
Genauso bei den Augen zuerst hier genau in die Mitte,
dann machen wir eine Rotation nach links und rechts auf der
Oberfläche des Kopfes und dann kippen wir sie nach oben.
Die Nase, die steht ja als senkrecht der Kegel hier.
Die kippen wir zuerst nach vorne
Können wir überlegen, welche Achse das sein muss und
mit welchem Vorzeichen wir kippen müssen?
Dass sie nicht in den Kopf reinwächst, sondern nach draußen.
Und dann setzen wir sie auch in die Mitte und rotieren
sie auf der Kopfoberfläche nach oben. Dann ist sie an
der richtigen Stelle. Und damit der Arme nicht friert,
haben wir eben noch einen Schal verpasst und einen Hut.
Boah, überlegen Sie mal, wie würden Sie denn diesen Schal
hier modellieren mit den Objekten, die wir schon kennen?
Ja? Ich glaube, zwei Sachen einmal ist aus dem Kumpel,
den heizt du dann direkt noch Ich war da.
Ja, schon mal nicht schlecht. Also hier eine Kugel
, müssten wir dann noch skalieren. Und hier dieses,
was sie raushängt, skaliert der Quader.
Hat jemand einen anderen Vorschlag statt Kugel? Also mit
der Kugel wird ja sein Hals total vom Schall durchdrunden.
Das ist in der Tore, sorry.
Thoros, genau. Also ich habe hier den Tores genommen,
man würde den Unterschied wahrscheinlich gar nicht so sehen,
aber ich habe hier diesen Tores rumgelegt und dann hier unten den einen flach geklopften Quader ran gesteckt.
Und für den Zylinderhut
Was? Naja, gut. Da gibt es in Popfried
schon das Sprachelement Zylinder, das könnte man dann nehmen, ne?
Einfach zwei Zylinderteile zusammengesetzt. Und für die Klier? Ja,
am Anfang stand er,
glaube ich, dass wir schwarze Kugeln für die Knöpfe,
weil das sind aber doch hier jetzt auch keine Kugeln,
sondern auch diese Todes.
Dissier? Ja, die haben hier ein weißes Loch in der Mitte,
ne? Interessant, gute Augen. Die sind pechschwarz,
dass die hier in der Mitte hell sind und glänzen,
liegt daran, dass ich denen eine Textur verpasst habe, die glänzen
Die helle Glanzlichter erzeugt. Also wir sehen an den weißen Stellen
hier tatsächlich Stärke von Pofrey, dass die Lichtquelle sich drin spiegelt.
Ja, das sind also die Glanzteile drin.
Und wenn sie noch einen alten Kohleofen bei sich finden,
dann gucken sie mal, also Briketts und so,
die haben tatsächlich glänzende Stellen.
Ich weiß nicht mehr, ob ich die Dinger hier in
Eierkohle verwendet habe und länglich oder sie kugellich gelassen habe.
Können wir noch mal gucken, wenn wir da aufs Programm schauen.
So, hier haben wir also unseren Frost,
die marschieren
Komisch, ich hatte eigentlich einen Filmmethoden, na, egal.
Wir können mal überlegen, was ich hier noch alles gemacht
habe an Modellierungen, damit es eine Idee kriegen,
wie sie sich ihrer Übungsaufgabe nähern können.
Dann gehen wir nochmal auf den Anfang zurück. Also,
zum einen hier unsere gestapelten Objekte per Transformation zusammengesetzt,
dann sehen wir hier wichtigen Teil der Übungsaufgabe bewegte Gliedmaßen.
Ja, wie wollen wir das denn machen?
Unser Schneemann soll elegant beim Spazieren mit seinem Arm schlenkern
Welche Transformationen brauchen wir da? Genau, das ist natürlich so mit den Robotern.
Ja, genau. Also wir denken uns eine Rotationsachse,
um den Punkt, wo unser Schultergelenk ist,
und müssen dann den Arm, wir haben hier in dem Fall,
ist auch eine langgezogene Kugel,
ja, in eine psoidische Familie.
Den müssen wir genau um diesen Punkt drehen.
So. Und dasselbe Spielchen habe ich mit den Beinen gemacht.
Deshalb macht der keinen Loop
Also wenn jemand eine ähnliche Szene hat mit Fußstapfen,
die hinterlassen werden, ich hätte da nicht zu viel Zeit drin investiert,
also die Fußstapfen erscheinen magisch zu einem anderen Zeitpunkt,
als wenn der Schnee berührt wird, ja.
Sie könnten schon auch anders als ich auf solche Feinheiten achten,
dass das ein bisschen synchroner ist.
Okay. Denn im Skript steht der volle Code drin für
die einzelnen Transformationen. Wir haben uns die syntags angeschaut,
also das Sinnvollste für sie ist, dass sich hinsetzen und mal versuchen,
Für die einzelnen Teile, die sie dabei interessieren,
obwohl sie meinen, brauchen zu können.
Dass sie die einfach mal nachvollziehen und sehen, aha,
was wird um was rotiert.
Hier ist nun mal ein simples Beispiel für die Rotation.
Einige kennen das aus den SE3, zur SE3-Vorlesung für Rekursionen.
Wenn wir diese Pyramide, Kill-Filme bin ich nicht dran,
die entsteht, indem wir einfach Objekte stapeln,
um dieselbe Achse nur der Translation nach oben und dann in
jedem Schritt etwas kleiner skalieren und ein Stück rotieren
Was so, ich muss eigentlich unser Tonkabel.
Die Boxen sind auch unten gesprungen. Ach so. Ja
, gut. So gut ist das Stück auch nicht.
Also meine Klavierkünste sind nicht so erhebend. Also lassen wir
es mal ohne Ton. Sehen wir den Nutzen der Rotation
und Translation. Ja, im Wesentlichen. Und das Zweite,
was man gut nutzen kann dafür, ist,
dass man die Position,
das Zeichnen der Pyramide wieder von der Klopp-Variable abhängig macht
Beim Schneemann übrigens schlenkernde Arme und Beine.
Man möchte innen nicht im preußischen Stechschritt,
also immer mit konstantem Tempo die Beine schwenken lassen,
sondern gegen Ende zerrt abbremsen, dann wieder zurück,
ein bisschen beschleunigen, wieder langsam, wenn es nach oben geht.
Und das kriegt man immer ganz gut hin,
indem man eine Winkelfunktion verwendet, statt der nackten Clock-Variable.
Also wenn sie einfach statt Clock-Variable selbst zunehmen,
zum Beispiel den Cosinus oder Kursinus Quadrat.
Der Clock nimm, Clock wandert ja zwischen 0 und 1
, ja,
den Winkel ausrechnen davon
Also von den zwei P, einfach den Cosinus nehmen,
dann kriegt man damit eine schöne, gedämpfte Schwingung,
die einfach in den Endpunkten immer einigermaßen sanft ist.
Oder die Schachtelpunktpuppe aus SE3. Die Skripte, die das erzeugen
, habe ich mit Skim geschrieben, aber eben die...
In dem Fall, mit Pafri gerendert, nicht mit Skim.
Also auch hier sehen wir einfach die Skalierung immer kleiner,
immer kleiner,
hier nicht mal
eine Translation
Was hier zusätzlich noch geschehen ist, ist, dass sich
die Transparenz des Objektes von der Clock abhängig gemacht hat.
Also damit können wir Geister erscheinen lassen.
Eben die... Die hatten wir ja eben schon.
Immer Variante. Zwei. Mir ist jetzt nur,
um auch ein bisschen Translation reinzubringen,
diese Variante
Wie man den Teil macht, wird gleich im Anschluss Werner Hansmann erzählen.
Also was man hier sieht, ich habe ein Objekt,
ja, zerlegt das in zwei Hälften und lässt die Hälften auseinanderfallen.
Kann schon mal ihm den Spaß verderben und sagen,
dass wir zusätzliche Mengenoperationen im Pafrae haben und sie eben Durchschnittsmengen und sowas berechnen können.
Indem wir hier aus dem Objekt Teile rausschneide,
mit Mengenoperationen auf dem Volumen,
kann ich hingehen und Teile des Objektes separat verformen bewegen,
Hey, ach so. Ach, noch ein Rob-Rotationsbeispiel. Also auch dieses Beispiel,
was wir zum Thema Rekursionen kennengelernt hatten in SE3,
jedenfalls die, die es bei mir gehört haben,
die sehen hier Durchrotation und skalieren, können wir das komplett hinkriegen.
Ich gucke jetzt mal auf die anderen Teile. Der Computergrafik,
die wir hier im Hintergrund sehen, ich in SE3 verschwiegen habe.
Zum einen die Meeresoberfläche, um sowas hinzubekommen, wie Wellenmuster,
raue, gekrümmte Oberflächen, werden wir später Texturen behandeln.
Hätte dieses Problem hier in zwei Weisen machen können.
Zum einen die Oberfläche wirklich modellieren aus einer Folge von kleinen Patches,
die zusammengesetzt die Wellen ergeben. Oder aber wir sagen simpel,
Die Struktur der Oberfläche folgt einem Sinusverlauf und definieren das in Parfrae.
Und die Phasenlage, wo die Wellenberge bewegen,
anfangen sich zu bewegen, machen wir von unserer Clock-Variable abhängig
und damit können wir hier im Untergrund Seegang haben,
denn eine Richtung sich fortsetzt.
Wir können bei solchen Oberflächenmustern zusätzlich sagen,
welchen Grad von Turbulenz wir haben wollen und damit das ungleichmäßig machen.
Wir können oft für den Himmel Turbulenzen verangeben und fraktale
Muster vorgeben, die den Himmel texturieren.
Da gibt es verschiedene vordefinierte Himmel, die wir einschließen können.
Und auch da, damit die Wolken weiterziehen,
gehen wir nochmal auf den Anfang zurück.
Simpel, abhängig machen von. Von der Clock,
die wir haben. So, ich war jetzt wirklich stinkgefault
für den Rückweg bei dem Bild.
Ich habe den Film einfach rückwärts gespiegelt, dahinter gesetzt.
Deshalb, also ab der Mitte haben wir mit einmal Westwind
statt Ostwind und die Wellen gehen in die andere Richtung
Gut. Aber ich brauchte ja auch nicht den Übungsschein.
Auch diese Bäume, also das ganze Kapitel Rekursion,
können wir bei der Gelegenheit nochmal wiederholen.
Und auch da uns dann immer fragen,
wie macht man das denn nun impoffrey?
Zum Frühlingszeitpunkt. Ein Zylinder, dreifach eingesetzt, rotiert,
skaliert. Diese Blätter, ein Blatt definiert,
Perrotation um die Mitte mehrfach eingesetzt und zum Aufblühen abhängig von
der Uhr einfach den Neigungswinkel verändert
Diese Schmetterlinge aus dem Internet, zwei Schmetterlingsflügelbilder genommen,
projiziert auf Quadrate. Die Quadrate rechts und links angebracht,
die Konturen transparent gemacht. Und die Sittern hier ist Sinusquadrat.
Ja, als einfach für den Winkel abhängig von Nikosinusquadrat.
Also das ist im Wesentlichen kann man diese Art von Filmen mit allem,
was wir jetzt an Transformationen besprochen haben, programmgesteuert machen.
Aufbau, Länge der Teile, der Winkel,
um den
sie geneigt sind
Zusammensetzen mit Translation, Rotation. Werner wird gleich in seinem Teil der Vorlesung
erklären, wie wir zusammengesetzte Modelle machen aus den Basisteilen.
Mit Union Merch-Durchschnitt, die ganze Mengenoperation. Ich hoffe,
dass er es macht. Es wäre der Plan. Und wenn wir das haben,
können wir eben nachbelieben aus den Teilen, die wir haben,
mit Constructive Sion Solidgeometry, diese einfachen Bilder machen.
Die Blütenblätter hier. Ja, wir kriegen mal ein Blütenblatt
hin. Also bisher kennen wir Kugeln.
Wir kennen Tores
Quadrat ist es keins der Biden. Also was ich gemacht habe,
ist hier schlichtweg so eine Art Ei erzeugt und dann wie mit dem Eierscheibe.
Euer Scheibenschneide, Scheiben abgeschnitten aus der Kugel. Das Endstück der Kugel,
wunderbar als Kugelkalotte, gibt ein wunderbares, gewölbtes Blütenblatt.
Also da muss man ein bisschen kreativ sein.
Wie sind die Schneiderlinge nochmal aufgebaut? Ja, genau.
Also wir haben, ich glaube,
ich habe auf meiner Webpage auch die Modelle für die verschiedenen,
was ich für einen Schmetterling gemacht habe.
Das können wir immer
gemeinsam überlegen
Wie müssen wir denn, wie würde man ein Objekt machen,
so wie die Schmetterlinge ausgesehen haben?
Also meine waren hier irgendwie so länglich und hatten dann da Flügel dran.
Nach zwei Seiten, ja. Also wir brauchen einmal den Körper,
die Flügel und die Flügel müssen so machen können, um diese Achse.
Nee, Inko ist ja eine langgezogene Kugel eigentlich.
Ja, genau. Also das hier war schon mal,
genau, da habe ich eine Kugel genommen und habe per
Skalierung in diese Achse gestaucht, ein bisschen länglich.
Das ist wie so ein Illipsoid war. Und auch senkrecht
dazu. Und mit Verschlag und für die Flügeldecken hier.
Das ist ein bisschen wahrscheinlich aussehen, wie keine Höhe.
Ja. Im Prinzip, ja, man kann auch ein
Rechteck nehmen, das in eine Richtung keine Ausdehnung hat.
Und das habe ich genommen für die Flügel.
Und was wir in Parfree tun können, ist,
wenn das Muster sehr kompliziert ist, dass man sich vorstellt,
wie mit einem Dia-Projektor, nimmt man ein Bild,
was man hat,
ein PNG
Und projiziert das auf ein Einheitsrechnik?
Eins mal eins, ja, ein Rechteck im Ursprung.
So, Hirn mit Stück Kleinwand, eins mal eins.
Da habe ich ein PNG von der Flügeldecke drauf projiziert.
Und das ist jetzt eben, ja, genau,
in X und Y ausgerichtet.
Dieses PNG hatte transparente Teile am Rand, wenn sie eins haben,
was wir im Photoshop wieder so freigestellt haben,
dass man hier nur die Flügelform hat.
Ist das prima
Die Stink muss durch skalieren. In die richtige Größe gebracht werden,
wie wir es für die Flügel brauchen, dass die Proportionen stimmen.
Und dann per entsprechend Flügelschlag in der richtigen Phase mit
dem Sinus-Kosinus des Winkels, um den wir drehen wollen,
in die richtige Orientierung gebracht werden.
Und dann per Translation an der Stelle im Schmidt
an den Kest gebracht werden, in der wir es haben wollen.
Und wenn so ein Schmetterlinken Vier-Flügel hat,
dann programmiert man das bitte
nicht nur
Nicht viermal unterschiedlich, sondern überlegt sich ein kleines Makro,
dass das für einen Flügel richtig macht, den richtigen Parameter,
um das dann in vier Stellen anzubringen.
Okay. Noch mehr Fragen, so zu dem?
Ja. Was vielleicht nämlich den letzten Schritt, der hier
einfach als Textur auszugeben und nicht in die Flügel fahren.
Ja, also man kann hier statt der Projektion eines Gifts,
wenn man simples Muster hat, es gibt in Tectures Inc.,
das lesen sich mal durch, gibt es unglaublich viele vordefinierte Texturen,
die meistens für alle Lebenslagen schon reichen
Aber wenn man wirklich, sagen wir,
einen ganz bestimmten Schmetterling haben will, ein Admiral oder ähnliches
und hat ein Bild, dann kann man das nehmen.
Und dann, in diesem Bild, die Reflektanzeigenschaften geben,
die man gern hätte, so wie ob es glänzend ist,
metallisch ist oder so.
Ich glaube, er hat ein bisschen metallisch dazu genommen.
Gucken wir noch mal, vielleicht sollten heute ja Übungen sein.
Das wäre für den Musikteil der Vorlesung,
den nehmen wir mal lieber nicht.
Ich habe hier mal
Megapoff aufgerufen
Also hätte ich gerade gestern Nacht auf diesem rechten System
neu installiert habe, läuft mega Parfil nicht.
Also der Teil des Vorführeffektes, den müssen wir auf Mittwoch verschieben.
Aber ich kann die Teile zeigen, die wir brauchen, als Hilfsmittel.
Ich habe ja gesagt, wir programmieren in Parfree,
Parfree selbst ist ein System, was auf vielen Plattformen läuft,
für euch eine sehr aktive Gemeinde unterstützt wird.
Und wenn sie Windows oder Linux-Arbeit,
dann ist wahrscheinlich die eigentliche Fassung von Parfree
nicht die Smega-Porfil
Was sie benutzen sollten. Auf dem Mac läuft das eigentliche Pofränchen.
Es gibt dieses Konkurrenzprogramm Megapov. Und das ist insofern
ganz angenehm, weil es erstens ein paar Spracherweiterungen hat.
Also man kann ein paar Dinge in der Parfre-Sprache verwenden,
die eigentlich nicht eingegangen sind. Bequemes Arbeiten mit gekapselten
lokalen Variablen und so. Und es hat ein Interface,
mit dem man nicht alles von Hand schreiben muss.
Und die ganzen Settings kann man gut erklären.
Also ich habe hier mal ein Parfrae-Programm aufgemacht,
aber wir könnten vielleicht auch den Schneemann öffnen
3D. Ja. Oh Gott. Irgendwo muss hier Poff.
Drei Dinge dann. Da ist es ja.
Genau. CDB-Movies gucken wir da mal rein.
CD Transformationen
Oh, Schneeflocken. Och, nehmen wir mal Händigkeit, Puff.
Lange nicht mehr geöffnet. Also hier kriegt man schon mal eine Idee,
Händigkeit, das war der Film mit unserer bewegten Hand, ne?
Ist die Schrift groß genug, dass man das von hinten lesen kann?
Oder brauchen Sie hinten Fernglas? Also das ist typischerweise mit
so einem Pafrae-Programm beginnt, ist,
dass wir Standard in Clut-Files reinziehen für die Farben,
für die Texturen,
ja hier bestimmte Metalle wie Gold,
verschiedene Himmel
So. Und wenn wir jetzt das Programm in verschiedenen Varianten verwenden wollen,
ich habe schon auf Variablen gesprochen,
wir können das auch sehr gut durch sowas machen.
Eine logische Variable, Demo rechtsshändig. Ja, damit kann ich
dasselbe Programm verwenden, um einmal rechtssändig oder linksshändig machen.
Ich kann abhängig von dieser Variable fragen, welche Teile übersetzt werden sollen.
So, hier die verschiedenen Variablen eingeführt, ich verwende.
In dem Programm hatte ich ja eine Hand mit vielen bewegten Teilen.
Jedes Fingerglied War selbst so,
wenn man jetzt für jedes Fingerglied die Farbetextur angeben will,
dumm, also da führen wir auch für die Textur,
Oberflächenstruktur eine Variable ein und wählen da irgendeine aus.
Und wenn ich Handtexttur sage, kriege ich eben das eben
für alle immer dieselbe. Schrifttextur, Kameraposition, Blickrichtung,
damit man damit spielen kann, alles als Variable eingeführt. Ausrechnen,
den Öffnungswinkel der Kamera, aber hier, das Ausrechnen,
wo ist die Kameraposition, wo ist die Blickrichtung,
die beiden Vektoren voneinander subtrahiert, normalisiert, Und umgerechnet in Gerade.
Okay. Und an der Stelle hier,
wenn ich ein rechtshändiges Koordinatensystem zeigen will,
dann rechne ich abhängig davon jetzt aus,
was die Richtung der Kamera ist,
da ist mich minus 50 und andernfalls nämlich 110. Warum?
Einfach, wenn ich rechtshändiges oder linkshändiges Koordinatensystem habe,
ja auch die Winkelzählung unterschiedlich ist.
Und also im Wesentlichen strukturiert ziemlich viele Variablen eingeführt.
Länge, kleiner Finger, Länge, Mittelfinger und so weiter.
Fleißaufgabe und gucken, was anderes kommt.
Vorgriff auf das, was Werner zeigen wird. Mengen,
Operationen, zwei Objekte zu einem Verschmelzen,
obere zwei Daumenglieder zum Beispiel mit dem Union-Statement.
Ja, wir setzen oben einen Kegel hin und weiter unten
den Daumennagel. Und nett mit Rotation, Translation zusammengesetzt.
So, um so einen Pfeil zu machen,
können wir Hier im Mega-Poff-System ziemlich viele Sachen zu Hilfe nehmen.
Zum Beispiel hier sind vordefinierte Schablonen drin. Ich mache mal
einen neuen Pfeil auf. Nächsten Weg, den ich überschreibe.
Wir brauchen eine Kamera. Also nehmen wir die Kameraschablone.
Und statt jetzt auswendig wissen zu müssen, was man wohin schreibt,
können wir also in dieser Schablone sagen.
Kamera soll da und da stehen. Welchen Kameratyp wollen wir haben?
Ultra-Weitwinkel zum Beispiel ist vorher angestellt aus irgendeinem abstrusen Grund.
Sagen, wo die Kamera hingucken soll
Wir können auch gleich sagen, wie die Kamera im Raum liegt.
Also der Sky-Vector sagt, wie wir die Kamera selbst drehen wollen.
Man kann sehr schief in der Hand halten. Geben wir
den Öffnungswinkel an. Respektracio. Breite zur Länge des Bildes,
was wir haben wollen, ob wir ein quadratisches Bild haben wollen oder nicht.
Und nach rechts und nach oben, wenn wir jetzt mit Tiefenschärfe arbeiten wollen,
können wir hier auch noch irgendwie definieren,
wie stark das Bild verschwommen werden soll für die Bereiche,
die nicht direkt in der Einstellebene liegen.
Und, na gut, nehmen wir mal das Default.
Ich sage jetzt mal, okay,
und dann kriegen wir unser Kamerastatement hier rein.
Ähnlich können wir es für die Lichtquellen machen.
Wir brauchen hier auch eine Lampe. Im Wesentlichen,
wo soll sie stehen und welche Farbe soll sie haben?
Gehen wir mal ins Rotlichtviertel. Komplett null.
Klein wenig grün, um das milder zu machen.
3.9. Blau jetzt null
So, was kriegen wir denn jetzt?
So richtig rot war das noch nicht. Ich meinte hier
auch 0.1. Ja, jetzt haben wir eine schöne Route.
Lichtquelle drin und da sind eben viele Objekte in den Schablonen,
also da spart Arbeit, ja.
Vor allem stehen hier jetzt auch für die Oberflächeneigenschaften.
Wie schau, gut ist es poliert. Welche sind die Farbbegmente
drin? Wenn wir jetzt Materialien haben, sagen wir,
wir wollen Glaskugeln modellieren, Brechungsindex im Minden und so weiter,
sind hier überall die vordefinierten Schablonen drin.
Können Hintergrund in die Szene setzen
Dann haben wir unseren Fertigen Himmel drin. Dieses steht ja
jetzt nicht 0,1 bei LGB, vor dem Licht.
Und wir lernen nicht gerade 0,1 gesagt. Aber ich stell's
mir vor, zwei Hände. Interessant, ja.
Das ist mir noch gar nicht aufgefallen. Also setzen wir
es mal auf 0,1. Ich hätte es vielleicht nicht gesucht.
Nicht gerettet. Nochmal ausprobieren. Okay, also das sind so
ein paar Sachen, mit denen wir Objekte reinbringen können.
Wenn wir jetzt wissen wollen, was sind die Farben,
Texturen und so weiter. Also über diesen Dieses Menü hier
finden wir für alles, was wir mit Include drin haben.
Schon die Files. Und jetzt können wir also hier gucken,
na, was haben wir denn so an Farben? Ja,
die Farben haben alle Namen, die man sich gut vorstellen kann,
was es so sein soll, dass die Ros, ja,
so ein altrosa, kann er Red Green Blut zusammengesetzt oder Fleischfarben,
Leid wird Mandarin orange, cool, Kappa und so weiter.
Also die meisten Farben, die man braucht,
findet man hier schon vordefiniert und kann sie dann aus diesem Pfeil,
Colors Ink nennen.
Gucken wir mal auf die verschiedenen Materialien
Moment, nee, nee. In Knut, Textchessing,
das ist ein zweiter Fall, den wir häufig brauchen.
Ja, da ist vordefiniert, bestimmte Oberflächeneigenschaften. Und wenn sie
also etwas aus Glas machen wollen und wollen ein Rubinenrotes Glas haben,
dann können sie hier die Textur namens Ruby Glas nehmen oder
gebürstetes Aluminium,
finden sie Aluminium
Oberfläche von fennigen oder gebürstetes Aluminium, das Starfield ist schön
für Science-Fiction-Animation. Dies hier ist allerdings ein ziemliches Schummelsternenfeld,
wo man einfach so farbige Schlieren an schwarz-nachtschwarzen Himmel hat.
Es gibt noch einen Inklutfall, werde ich Ihnen auch noch nennen. Der ist,
den ich mir immer runtergeladen habe und ihn für mich verändert habe,
der sind alle 2000 Sterne, die von der Erde aus sichtbar sind,
mit ihren richtigen Positionen drin,
sodass man also die Sternenbilder echt machen kann.
Den verwende ich immer gerne, die Skys,
also das hier ist eine Schummelei,
sieht aber gut aus
Und da sind Steine drin. Red Marvel, White Marvel, Marmor.
Also damit können sie die Oberflächen schon ganz gut vorbereiten.
Gut, was haben wir noch? Include Skysing, verschiedenen Himmel.
Skys Fears. Also das Wichtige an einer Himmelskugel ist ja,
dass man sie unendlich weit weg hat, damit keine Schatten drauf fallen.
Also wenn wir eine normale Lichtquelle hier haben,
bauen sie auf und wir würden den Himmelshintergrund,
den wir mit den Wolken drehen lassen wollen,
so modellieren, indem wir einfach sagen, ja,
Der ist ziemlich weit entfernt, setzt mir die Entfernung mal auf
100. Dann wird der Himmel aber von unseren Lampen auf der
Erde beleuchtet. Wenn wir ihn unendlich weit weg machen,
dann sagt Puffrey Prima, man muss ihn nicht mitrechnen,
der ist so weit weg, der ist außerhalb der Szene.
Also gibt es als Kompromiss einen Himmel,
der durch unser Licht auf der Erde nicht beeinflusst wird,
aussieht wie unendlich weit, aber nah genug ist,
dass Puffre ihn mitrechnet.
Das ist das, was wir hier immer verwenden können,
okay. Und dazu, wo habe ich jetzt
meinen Tech-Shop
Machen wir einfach Jan halt. So. Gehen wir mal nochmal
auf unsere Rückungsfolien, für die weiteren Programmkonstruktionen.
Makros und Funktionen. Oder. Nix hiervon funktioniert von beiden
Links. Das ist ja super
Das ist schön. Gehen wir dann mal dahin.
Gehen wir mal auf 1400. Intervallschachtelung ist nicht
meine Stärke.
Die, die im Schnitt. Was ist denn jetzt
nochmal kombinieren? Die, die im Schnitt. Ja.
Oh, jetzt sind wir bei in der Gegend.
Sternenhimmel. Die hat man zwar nicht angeguckt, ne?
Simulationsuhr. Okay, das haben wir zum Schluss uns angeguckt.
Wenn wir jetzt hingehen wollen und Dinge in Abhängigkeit von Klock
darstellen wollen, ne
Dann können wir eben sämtliche Rotationen für Vektoren,
für Punkte, die wir ausrechnen und so weiter,
da direkt von der urabhängig machen.
Und hier habe ich eben die Phasenlage, 3360 mal Glock ausgerechnet.
Damit können wir unsere Objekte abhängig davon bewegen.
Die Kugeln, die wir das letzte Mal arrangiert haben.
Die Farbe ändert sich in Abhängigkeit von der Uhr,
die Position, die Höhe über der Grundebene und so weiter.
So jetzt zum Modellieren.
Also wir haben die Standardbibliotheken kennengelernt
Und da sind eben drin die Farben, die Texturen,
teilweise können sie aus dem Internet raffinierte, in Klutfalls runterladen,
wo sowas wie Lego-Steine und alle schon fertig drin sind.
Das dürfen sie auch gerne für die Übung verwenden, ja.
Und alles mit Include angeben und innerhalb des Teams bitte,
wäre es sinnvoll, wenn sie ihre Aufgaben so verteilen,
dass sie sagen, okay, sie schreiben das Modul,
sie, die Cities, ja, nicht vergessen,
was sie über strukturiertes Programmieren gelernt haben,
wenn sie hiermit anfangen mit Poffrey auf Liederster Ebene zu hantieren,
sondern vorher einen Plan machen, welche Teile brauchen sie das in Glutfalls modellieren wird im Team verteilen.
Die typischen Falls, die wir haben, Colors,
Checktures, Finish, wie gut es poliert, Steine,
also sowas wie Granit, Marmor und sowas drin, die verschiedenen Himmel,
ja, die Sternenhimmel, Holzmaserungen, die sind sehr raffiniert gemacht.
Hätten wir dies letzte Mal schon gesehen, im Himmel?
Himmelbilder. Also wenn wir jetzt einen Himmel haben wollen mit Wolkenmedizin,
können wir also sagen Includes,
Guys Inc und suchen uns hier S-Cloud wann aus.
Netter Sommerhimmel,
kurz bevor das Tiefdruckgebiet ranzieht
Oder ein blauer Himmel mit Schiffchenwolken, ja, Zerrussbewölkung.
Also da sind so verschiedene drin, wenn es anfängt zu regnen.
Oh, ich habe, zieht hier wieder nichts mehr.
Zerrallbeleuchtung. Vielleicht ein bisschen besser. Okay. Der Himmel,
den ich am meisten verwende, ist Apokalypse,
der sieht man jetzt nicht so richtig,
weil es hier immer noch
zu hell ist
Okay, also diese Himmelsobjekte für den Hintergrund sind endlich weit entfernt,
haben eine eigene Lichtquelle, die sind beleuchtet,
aber nicht durch das, was wir auf der Erde haben.
Wir können sie rotieren und wir können die Pigmente skalieren.
Und wenn der Himmel jetzt so im Laufe des Tages die Wolken mitziehen sollen,
dann können wir eben einfach sagen, ja okay, wir nehmen eine Himmelskugel,
rotieren sie um Y in Abhängigkeit von der Uhr mal 360.
Dann wird über die ganze Szene,
haben wir einmal wie im Aussichtsrestaurant eines Thomster
einen Blick in eine Richtung
Oh. Jetzt weiß ich, warum ich den Knopf angeführt hatte.
Okay, nochmal. Als ich den Film zuerst animiert hatte,
hatte ich einen etwas langsameren Prozessor, der zogen die Gemütlichte vor sich hin.
Also inzwischen ist da ein bisschen Hektik reingekommen. Da können die
jetzt ja mal ein bisschen lokalpatriotisch mit diesen Mitteln etwas modellieren.
Also sagen wir mal, ein Flackenmast mit Uni-Flagge.
Und was brauchen wir von allem, was sie jetzt kennengelernt haben?
Also erstmal ein Himmel. Ich habe hier den Himmel-Apokalypse Damit
hätten wir ziemlich viel demonstriert hier an der Uni.
Hier ist ein Flackenmass, ein Zylinder, da drüber eine kleine Kugel,
dann hier ein Stück Tuch modelliert als Rechteck und darauf projiziert das alte Uni-Logo.
Ja, dann haben wir noch ein bisschen Rasen.
Also unsere Include-Files, die wir brauchen, wieder die Variablen eingeführt.
Und jetzt sind noch ein paar Tricks, auf die ich gerne eingehen möchte.
Also zum einen wieder die Skalierung für die Szene,
Standardmethode, immer für die gesamte Szene, sagen wir erstmal,
wie groß soll alles sein?
Wo ist der Mass
Die Spitze des Flattenmastes, habe ich bei sechsmal Flattengröße in Y,
also entlang, meistens hier oben haben wir es.
Wie groß soll der sexuelle Radius des Flattenmastes sein? So,
und die Kamera,
die soll jetzt genau auf die Mitte des Flattenmastes schauen,
nicht nach oben, nicht nach unten,
sondern genau in die Mitte mit für keine stürzenden Linien kriegen.
Ja, also wir nehmen die Kamera ungefähr ein bisschen weiter
weg von der Szene und dann steht sie in der Mitte
der Höhe des Flattenmastes steht hier, 0,5 mal spitzes Flackenmastes.
Und schaut genau geradeaus, damit wir keine stürzenden Linien kriegen,
also auch 0,5 mal spitze des Flackenmastes, Öffnungswinkel 54.
So, dann beleuchten wir die Szene mit einer weißen Lichtquelle,
also weißes Tageslicht. Und das reicht aber nicht. Okay,
jetzt in der realen Welt haben wir keine zwei Sonnen am Himmel.
Ja, wenn ich einfach eine zweite Lichtquelle dahin gestellt hätte,
um das Ganze ein bisschen heller zu kriegen,
Dann würden wir mit einem Mal für alle Objekte zwei Schatten sehen.
Das wollen wir nicht haben. Also für die Computergrafik,
vergewaltigen wir ziemlich oft die Physik, indem wir Objekte einführen,
die sich physikalisch schummelmäßig verhalten.
Typischerweise werden sie ihre Szene wahrscheinlich mit vielen Lichtquellen bestücken,
die nicht nur energiesparend sind, sondern auch noch die besondere Eigenschaft haben,
dass sie Objekte keine Schatten werfen.
Macht dieses Schlüsselwort Chaduless. Damit haben wir Lampen ohne Schatten.
Sehr praktisch, wünsche ich mir im realen Fotostudio auch.
Und dann Himmelskugel, Pickment, Apokalypse aus unserem Katalog von
Skys Fears
Haben die Lampen dann auch eine Reflexion oder? Das Licht
wird weiter reflektiert, aber es wirft keinen Schatten mehr.
Also damit nimmt es vor allem für Hintergrundlicht,
was additiv dazukommt. Und das ist überall zu sehen.
Im Spiegelbild taucht es auch auf, ja.
Gut, also unsere schattenlosen Lichtquellen kannst du gleich vorwegnehmen.
Mit Licht können wir noch sehr viel Brutales schummeln.
Die haben, typischerweise ist es bei der Lichtquelle so,
Abnahme der Lichtintensität mit einem Quadrat der Entfernung
Von R-Quadrat. Wenn wir das in der Computergrafik-Szene machen,
dann werden die Szenen so,
dass ziemlich schnell alles im Dunkeln versinkt und um das zu vermeiden,
verwenden wir eine Computergrafik meistens Lichtquellen,
wo es nicht mit einem Quadrat der Entfernung die Energie abnimmt,
sondern nur linear.
Sehr viel einfacher. Und die Bilder sehen besser aus,
als wenn wir es richtig gemacht hätten.
Das ist das Überraschende. Also die Bilder,
die man physikalisch richtig rendert, sagen die Leute immer,
das kann doch nicht sein, das ist falsch.
Man sieht ja nichts, ne?
Weil die Geschummelten sehen immer gut aus und werden akzeptiert.
So,
unser Unilogo
Projizieren wir auf dem Polygon, wie vorhin besprochen,
bei den Schmetterlingsflügeln. Und dazu verbinden wir das Sprachkonstrukt Image-Map-Texture.
Wandert in die XY-Ebene, hat die Eckpunkte 00 und 11.
Hier sehen wir, wie man das genau machen kann,
mal an einem Beispiel.
Also diese Teile sind im Skript im PDF-Skript alle sehr weit hinten.
Als ich am Freitag geguckt hatte, waren noch erstaunlich viele gedruckte Skriptexemplare da.
Ich möchte nur daran erinnern, dass sie existieren,
solange sie noch existieren
Gut, hier, also den Flackenmast, das ist eben der Zylinder.
Höhe, Top of Flagpool. Da oben ist das Zentrum
der einen Kreisscheibe. Er hat den Radius, Radius of Flagpool.
Weißes Pigment. Und ist glänzend, weißer Mast,
ja. Obendrauf sitzen eine metallische Kugel, Texte,
T-20, so eine Art golden, goldene Bronze tun.
Und dann das Rechteck fürs Flackentuch, ein Polygon mit fünf
Ecken, Moment, Rechteck hat vier Ecken.
Aber wir geben immer einen mehr an,
um dann zum Ausgangspunkt zurückzukommen
Also um ein Viereck zu modellieren, schreibt man fünf Finnen.
Wir beginnen im Ursprung, gehen einen Schritt in Einheitsrichtung X,
dann an X plus Y, Diagonale drüber, Y zurück zum Ursprung.
Damit haben wir jetzt ein solches Polygon. Das hat Einheitsgröße,
wir skalieren es auf die Flackengröße und projizieren darauf ein Pigment,
um jetzt die Farbe der Oberfläche zu definieren,
projizieren wir unser PNG-File drauf und die Haharoth und skalieren den natürlich auf dieselbe Größe,
wie das Rechteck hier auch ist.
Und dann muss das Tuch, muss die Flagge gehisst werden,
an die Spitze Flaggenmasse gebracht werden. Also wir translatieren es so,
dass es bei 0,8 mal spitzes Flaggenmastes landet,
also ziemlich kurz unter der Spitze des Mastes hängt.
Und natürlich, das soll nicht im Inneren des Mastes verschwinden,
also müssen wir es auch noch in X-Richtung um den Radius des Flaggenmastes nach außen verschieben.
Und mehr Fachnutzung von Objekten kennen wir,
wenn wir es einmal haben,
können wir es natürlich einen ganzen Flaggenwald aufbauen und immer wieder Object,
Object, Object sagen,
dann sehen wir es.
Sehr oft
So einfach, um das hinzukriegen. Einmal, dann steht
es genau im Ursprung und dann transnatiert an verschiedene Stellen.
Okay, jetzt wollen wir eine zweite Flagge mit dem
anderen Muster reinbringen, unser altes Fachbereichslogo.
Das haben Sie in Ihrem Studium gar nicht mehr erlebt,
als im Fachbereich dieses Logo hatte. Aber es hält sich hartnäckig,
weil viele es lieben und anhängig, darauf reagieren.
Also haben wir das hier in Memoriam auch noch mal drin.
Dasselbe Spielchen, der einzige Unterschied ist diese Stelle hier.
Beim Imagemap setzen wir eben das andere Objekt ein.
Nun werden sich sagen, ja, um Himmels Willen,
so programmiert man doch nicht. Wir haben zweimal fast denselben
Kot, der unterscheidet sich nur an einer Stelle.
Und das ist genau die Stelle, wo man sich überlegt,
wie kann ich das eben mit Makros machen, ne?
Ja? Wir haben jetzt dieses Protokoll jode 5 Punkte beschrieben.
Wenn wir das Ding jetzt nicht zugemacht werden,
würde dann das Moment sozusagen aufgepasst werden.
Ich habe es nie ausprobiert, ehrlich gesagt.
Machen Sie es mal. Ich vermute, Sie bekommen schlichtweg
eine Fehlermeldung, wenn Sie es nicht zumachen.
Die Punkte müssen Kobler nah sein. Also das wird,
glaube ich, nicht getestet, aber wenn sie nicht kupplernah sind,
bekommen sie ziemlich fiese Ründungsfehler oder es kann denen abstürzen.
Okay, hier haben wir die FB-Flagge da reingesetzt.
Und das machen wir jetzt mal noch mal als Makro,
damit man eben den Code mehrfach nutzen kann.
Wenn wir jetzt eine ganz allgemein sagen wollen,
wir wollen eine Flagge haben, was brauchen wir an Parametern?
Einmal welches Bild soll drauf erscheinen? Wo soll es erscheinen
? Wie groß und wie breit sie ist.
Natürlich wollen wir, dass unsere Fachbereichsflagge breiter und größer ist
als die Uni-Flagge
Das muss man eingeben können. Okay. Und was dieses Makro leistet,
es hat diese vier Paramittel und was immer wir hier übergeben,
wird textuell eingesetzt an den Stellen, wo hier unten die Namen auftauchen.
Also wir übergeben hier irgendeinen Text für Bild und der
wird hier eingesetzt für Bild, genauso Ort.
Der Text, den wir übergeben, wird hier eingesetzt.
Und wenn diese Parameter eingesetzt wird, dann wird Dieser Makrotext generiert und ausgeführt.
Das ist das, was man wissen muss. Es ist nicht das,
was wir als funktionale Auswertung kennen,
alle Parameter hier oben ausgewertet und dann die ausgewerteten Werte eingesetzt,
sondern wörtlich der Text, der hier steht,
wird hier lexikanisch eingesetzt und erst dann wird dieses Makro expandiert.
Das heißt, die Berechnung, all der Parameter,
die wir übergeben, geschieht in dem Moment,
wo der expandierte Text hier drin steht, das ist das,
woran man sich bei der Makroprogrammierung gewöhnen muss und was Zu Fehlern führen kann,
wenn man es falsch macht.
Also diejenigen, die SE3 kennengelernt haben,
sollten sich bitte ganz gründlich nochmal den Passus anschauen.
Makro-Pitfalls, weil in alle davon können wir hier laufen.
Das ist, wir können ungewollte Mehrfachauswertungen kriegen auf diese Weise,
warum Mehrfachauswertung, kann man schon sehen.
Wenn wir hier oben für Breite einen Ausdruck hingeschrieben haben,
der drei Stunden Berechnung dauert,
dann werden wir diese drei Stunden Berechnung hier an jeder Stelle
wiederhaben,
wo das Wort Breite auftaucht
Und wenn der Ausdruck für Breite, Variablen referenziert,
die hier drin verschattet werden,
wird es nicht mit den referenzierten Variablen außerhalb gerechnet,
sondern mit denen, die es hier verschatten.
Wir können Bezugsfehler für Variablen kriegen. Also das sind
die Pitfords, an die man sich nochmal erinnern sollte.
Aber wenn wir jetzt so ein Makro haben, Flagby,
können wir einfach hier übergeben, okay, unser Fachbereich Logo als dringen.
Die Vektorin, ja. Und so wie ich sie reinbeschrieben
habe, kann es klappen. Ich würde empfehlen,
sobald sie aratmetische Ausdrücke haben, habe ich hier nicht gemacht
beim Übergeben Klammern
Wegen der textuellen Einsetzung. Beim Makros. Hier sind die Pitfalls nochmal.
Also die Folie ist mit Absicht oben etwas dramatisch gehalten.
Wir haben bei der Makroprogrammierung textuelle Ersetzung der Parameter.
Genauer wissen C, auch geschieht. Namen können in einen
anderen lexikalischen Kontext geraten. Ausdrücke mehrfach ausgewertet werden, Apparaterpräzedenzen
können sich ändern. Wenn Sie irgendwie einen Ausdruck haben,
Im Rumpf ihres Makros, X plus Y plus.
Und jetzt schieben sie etwas hinein, was mit einmal Operatoren,
mit anderer Präzedenz enthält. Dann kann es eben sein,
dass das, was sie gemeint hatten,
was gerechnet werden soll, nicht so gerechnet wird.
Außerdem sehr enttäuschend hier, es wird kein Rekursionsstack aufgebaut.
Jetzt können Sie mal anfangen zu grübeln,
wie ich denn all diese Rekursionen Animationen gemacht habe.
Das ist genau der Grund gewesen,
weshalb ich den Teil in Scream programmiert habe und
den Textfall habe erzeugen lassen
Weil wir keinen Rekursionsstack haben. Niemand verbietet ihnen das Ganze
rekursiv oft zu rufen. Ja, aber alles,
was beim Schritt davor geschehen ist, wird vergessen.
Sie haben keinen Stack. Also,
wenn Sie mit Makros rekursiv programmieren wollen und wissen,
was es ist, dann programmieren Sie bitte entrekursiv.
Beispiel für falsche Apparaterbindung. Wenn wir einfach ein Makro
zum Quadrieren definieren, Quadrat von A. A mal A.
Ja. Und Sie deklarieren jetzt eine Variable C
als Quadrat
Square, Makro von 2 plus 3. Das expandiert zu dem
schönen String. 2 plus 3 mal 2 plus 3. Deshalb,
meine Empfehlung, alles klammern, wenn sie arathmetische Ausdrücke übergeben,
damit verhindern sie es. Wenn es geklammert, übergeben worden wäre
, würde hier eben 2 plus 3 geklammert stehen.
Oder noch sicherer, dort wo sie im Makro die Parameter
einsetzen, hier die Klammern einfügen.
Geklammert, A mal Klammer
Gut, begriffen hat man, dass man zum ersten Mal
drauf reingefallen ist. Aber ich wollte schon mal bei Ihnen
die Glöckchen klingeln lassen, damit sie sich daran erinnern,
wenn sie darauf reinfallen und diese merkwürdige Ergebnisse haben.
Oder wir führen eine lokale Variable XXX ein Jahr.
Drei. Und geben als Resultat zurück, dreimal A plus
XX. So. Jetzt übergeben wir einen Wert für A,
die Claire XXXX gleich eins, rufen auf falsche Namen XX.
Und dieses XX, glauben wir, hoffen wir wollen wir,
soll dieses Hier deklarierte XX mit dem Wert 1 zu referenzieren.
Dadurch aber, dass einfach nur der Text X X X
eingesetzt wird. Wenn hier unser Makro expandiert wird,
dann steht hier nämlich dreimal anstelle von R wird X X reingesetzt,
dann haben wir dreimal X X X, unsers,
von dem wir meinnten, das ist die 1 meint,
und das Lokale, Zweite.
Das Makro wird so ausgewertet, als wäre dieser Text X
X natürlich das, was lokal hier am nächsten ist.
Falsche Namen. Ja? Und auch darauf sollten wir achten,
wenn Sie jetzt im Team In Klutfalls definieren, mit vielen, vielen Makros.
Das Sicherste ist, dass sie für alle Module,
die sie haben, sich ein Namenschema überlegen,
dass innerhalb der Module, die sie von anderen über in Klut reinziehen,
keine Konflikte zu ihren eigenen Namen entstehen.
Dass sie irgendwie, wenn Peter sein Modul definiert,
dass seine Variablennamen alle mit P und der Score beginnen oder irgendetwas,
was es sicher macht,
dass sie nicht aus Versehen in Makros Konflikte mit ihren eigenen Namen
Okay. Wenn wir jetzt viele Flacken haben wollen und so weiter, einen Trick noch.
Sie können so ziemlich alles in Eris tun in Parfree.
Ja, und dann eben, wenn sie etwas,
viele Objekte brauchen, in Verbindung mit einer Wallschleife, diese RS-Traversieren.
Ich habe hier mal viele Flatten als Files und einfach
ein Irre, mit Strings von Pfeilnamen definiert.
Und in einer Waldschleife können wir jetzt hingehen,
weil bis End hier die Bedingung erzeugen wir,
in Abhängigkeit von der Laufvariable E, eine Flagge mit dem Mietenbild.
Und erhöhen ihn in der Schleife, so lange gibt es
eben die Grenze erreicht, ist der Menschenzeit von Bildern.
Also so würden sie es wahrscheinlich in Java genauso programmieren.
Sieht man nur auf dem Text viel anders aus.
Und dann können wir einen Flaggenwald mit unterschiedlichen Bildern haben.
Und auf diese Weise können wir eben ein Stadion mit Zuschauern füllen,
die alle unterschiedliche Hütte aufhaben, unterschiedliche Farben in ihren Gewändern und so weiter.
Unterschiedliche Größe im Wesentlichen, aber alle dasselbe Modell verwenden.
Ja. Okay, damit Zeit für unsere Pause.
Und dann treffen wir uns zu Werners Vorlesung hier Viertel
nach wieder