Referenzpunkte
Referenzpunkte sind eine sehr hilfreiche Methode, um Objekte an die richtige Stelle zu positionieren. Ein Beispiel:
Angenommen, in einer Script-Datei ist ein Würfel wie folgt definiert:
new cube{
scale=[2,4,1];
rotate=[10°,30°,0];
pos=[1,1.5,0];
}
Später soll an eine Ecke des Würfels eine Kugel gesetzt werden. Da der Würfel aber rotiert wurde, müsste man sich erst
mühsam die richtigen Koordinaten ausrechnen. Statt dessen kann man aber auch einfach einen Referenzpunkt definieren:
new cube{
scale=[2,4,1];
rotate=[10°,30°,0];
pos=[1,1.5,0];
setrefpoint("Point1",[0.5,-0.5,-0.5]);
}
...
new sphere{
scale=[0.2,0.2,0.2];
pos=getrefpoint("Point1");
}
Mit der Funktion setrefpoint wird zunächst ein Referenzpunkt gesetzt, der im Koordinatensystems des Würfels die Koordinaten
[0.5,-0.5,-0.5] (rechte obere vordere Ecke). Dieser wird dann genau wie der Würfel transformiert, sodass die Kugel hinterher
genau an der richtigen Stelle landet. Ähnlich wie bei Arrays dient zur Identifizierung wieder ein beliebiger String.
Referenzpunkte können funktionieren auch innerhalb von Kombinationsobjekten noch:
new container{
new cube{
scale=[2,4,1];
rotate=[10°,30°,0];
pos=[1,1.5,0];
setrefpoint("Point1",[0.5,-0.5,-0.5]);
}
new sphere{
scale=[0.2,0.2,0.2];
pos=getrefpoint("Point1");
}
pos=[2,3,4];
rotate=[10°,0,20°];
}
new sphere{
scale=[0.2,0.2,0.2];
pos=getrefpoint("Point1");
}
Obwohl das Kombinationsobjekt als ganzes nochmals verschoben und rotiert ist, landen hier beide Kugeln an der richtigen
Stelle.
Was allerdings NICHT funktioniert, ist das Folgende:
new cube{
scale=[2,4,1];
rotate=[10°,30°,0];
pos=[1,1.5,0];
setrefpoint("Point1",[0.5,-0.5,-0.5]);
}
new container{
new sphere{
scale=[0.2,0.2,0.2];
pos=getrefpoint("Point1");
}
..
pos=[1,0,0];
}
Hier würde die Kugel um den Betrag [1,0,0] verschoben zu der Würfelecke erscheinen, da erst der Referenzpunkt geholt
und anschließend unabhängig davon nochmals verschoben wurde.
[