i

Transformationen

Transformationen sind grundlegende Operationen, die man auf einem Körper ausführen kann. Wir verwenden drei Arten von Transformationen: Versetzungen (Translationen), Rotationen und Skalierungen.

Translation

Ein Objekt befindet sich nach seiner Erschaffung zunächst im Ursprung eines Koordinatensystems. Um es an anderer Stelle erscheinen zu lassen, ist eine Verschiebung (Translation) nötig:

<!-- roter Kegel -->
<Transform translation='4 0 0'> 
	<Shape>
		<Appearance>
			<Material diffuseColor="1 0 0"/>
		</Appearance>
		<Cone bottomRadius="1.5" height="3" />
	</Shape>
</Transform>

<!-- weisser Kegel -->
<Shape>
	<Appearance>
		<Material diffuseColor="1 1 1"/>
	</Appearance>
	<Cone bottomRadius="1.5" height="3" />
</Shape>

Hier erzeugen wir zwei Kegel, einen weißen und einen roten. Den roten Kegel versetzen wir mittels Translation durch den Tag <transform translation="4 0 0"></transform> welcher ein Objekt um 4 Einheiten auf der X-Achse versetzt. Die anderen beiden Parameter, die auf 0 stehen, würden ihn auf der Y- bzw. der Z-Achse versetzen.

Aufgabe 1

Baue folgende Figur nach ("ziehe" am Bild, um die weiße Kugel zu sehen):
Die kleine weiße Kugel (Radius 0.5) ist im Ursprung. Die bunten Kugeln (Radius 1) sitzen jeweils auf einer der Achsen im Abstand 3.

Rotation

Neue Objekte "stehen" nach ihrer Erzeugung sozusagen auf der Ebene, auf der die X- und die Z-Achse verläuft, Kegel "zeigen" dann nach oben auf der Y-Achse. Diese Richtung wird durch eine Rotation verändert:

<!-- weisser Kegel -->
<Shape>
    <Appearance>
        <Material diffuseColor="1 1 1"/>
    </Appearance>
    <Cone bottomRadius="1" height="3" />
</Shape>
<!-- roter Kegel -->
<Transform rotation='0 0 1 1.57'>
    <Shape>
        <Appearance>
            <Material diffuseColor="1 0 0"/>
        </Appearance>
        <Cone bottomRadius="1" height="3" />
    </Shape>
</Transform>

Hier wurde der rote Kegel um 90° nach links rotiert. Unser Tag dafür hier ist ein wenig komplizierter: <Transform rotation="0 0 1 1.57"> </Transform>

Die ersten 3 Zahlen legen fest, um was rotiert wird, genauer gesagt um welchen Vektor, in diesem Fall der Vektor (0,0,1), also praktisch um die Z-Achse (diese zeigt auf dich "aus dem Bildschirm heraus"). Die nächste Zahl ist das Bogenmaß des gewünschten Winkels -1,57 ist in etwa die Hälfte von Pi und steht damit für 90°.
Zum Umrechnen: Radians = Grad · π / 180

Aufgabe 2

Baue folgende Figur nach:

Hilfen:

  • Die Kegel liegen jeweils auf den Achsen.
  • Du kannst mit dem Ergebnis der Aufgabe 1 weiterarbeiten.
  • Transformationen können miteinander verbunden werden, z.B. <Transform rotation="0 0 1 -1.57" translation='3 0 0'> - also erst die Rotation, dann die Verschiebung.
  • Die Achsen kann man als dünne Zylinder (Radius 0.1) modellieren.

Skalierung

<!-- rote Kugel -->
<Transform scale="4 2 1">
    <Shape>
        <Appearance>
            <Material diffuseColor="1 0 0"/>
        </Appearance>
        <Sphere radius="1"/>
    </Shape>
</Transform>

Scale verzerrt ein Objekt entlang der Achsen. Hier verzerren wir das Objekt auf das vierfache auf der X-Achse, auf das doppelte auf der Y-Achse und belassen die Größe auf der Z-Achse.

Aufgabe 3

Baue folgende Figur nach: Zwei Kegel. Davon ist der gelbe verzerrt und der grüne verschoben und gedreht.
Die Achsen sind nur als Hilfe eingezeichnet.

Mehrfache Transformation

Hier muss man aufpassen, dass man die Reihenfolge nicht durcheinander bringt, da das Ergebnis sehr unterschiedlich sein kann:

<!-- rote Box -->
<Transform translation='2 0 0'> 
    <Transform rotation='0 0 1 .79'>
        <Transform scale="3 1 1">
            <Shape>
                <Appearance>
                    <Material diffuseColor="1 0 0"/>
                </Appearance>
                <Box size="1 1 1"/>
            </Shape>
        </Transform>
    </Transform> 
</Transform> 

<!-- gelbe Box -->
<Transform translation='-2 0 0'> 
    <Transform scale="3 1 1">
        <Transform rotation='0 0 1 .79'>
            <Shape>
                <Appearance>
                    <Material diffuseColor="1 1 0"/>
                </Appearance>
                <Box size="1 1 1"/>
            </Shape>
        </Transform>
    </Transform> 
</Transform> 

Die rote und die gelbe Box sind identische Würfel, werden auch um den gleichen Wert gedreht und verzerrt. Allerdings ist die Reihenfolge unterschiedlich und so auch das Ergebnis:

Auf einem Objekt können so auch mehrere Transformationen ausgeführt werden wie demonstriert. Man kann beide Transformationen wie oben in denselben Tag schreiben, also <transform rotation="0 0 1 1.57" translation="3 1 1"></transform>, dann muss man noch mehr aufpassen, dass die Reihenfolge stimmt.

Suche

v
1.3.1.5.3.4
www.inf-schule.de/information/informationsdarstellungxml/darstellunginformation/fallstudie_3dgrafiken/elemente/transform
www.inf-schule.de/1.3.1.5.3.4

Rückmeldung geben