TransformGroup

Network

Top Contributor
Hallo,

die Frage ist ganz einfach und bezieht sich auf den Sinn von TransformGroups in Java3D.

So wie ich das verstanden habe, kann damit eine Transformation mit x-beliebig vielen Objekten, zusammengehängt werden.

Nur wozu?
Auf der Seite Positioning the Objects wird der Sinn so beschrieben:
This may seem complicated, but the transform groups enable you to collect objects together and move them as one unit. For example, a table could be made up of cylinders for legs and a box for the top. If you add all the parts of the table to a single transform group, you can move the whole table with one translation.

Für mich macht die Erklärung wenig Sinn. Wenn wir gerade hier die Erklärung des Tisches verwenden und alle einzelnen Bestandteile davon in der selben TransformGroup wären, dann hieße das ja, dass alle Bestandteile an der exakt selben Stelle kreiert werden würden.

Für mich macht das persöhnlich keinen Sinn, denn wer will denn mehrere Objekte an der selben Stelle platzieren?

Vielen Dank
Gruß
Network
 

Marco13

Top Contributor
Stell' dir vor eines der Tischbeine ist ein Zylinder, der an der Position (0,0,0) anfängt und nach (0,0,1) in die Höhe ragt. Wenn das zweite Tischbein nun AUCH bei (0,0,0) ist, macht das natürlich keinen Sinn. Aber wenn es bei (0.8,0,0) ist (der Tisch also 0.8m breit ist), dann kann man die beiden an eine TransformGroup hängen, und den Tisch dann z.B. als GANZES einen Meter nach rechts schieben: Dann sind die beiden Beine eben bei (1,0,0) und (1.8,0,0) - aber sie wurden beide mit derSELBEN TransformGroup dort hin verschoben.
 

Network

Top Contributor
Vielen Dank erstmal.

Und genau dieses Verhalten hatte ich auch von einer TransformGroup erwartet.

Nur in allen Tutorials die ich bisher gelesen habe (3 :D) werden Objekte mit der TransformGroup verschoben, also sozusagen platziert.
Heisst das dann schlussendlich, dass ich jedes Objekt erstmal einer TransformGroup zuordnen muss, die dessen Position bestimmt und diese TransformGroups dann wieder einer TransformGroup hinzufügen?

Nicht das ich mich beschweren würde, nur finde ich das überladen. Ich füge "einen" Variablenwert ja auch keinem Vector zu, sondern nur einer Variable.
 

Marco13

Top Contributor
Ja - das ganze ist ja ein Szenegraph, und bildet eine Hierarchie. Wenn man so ein Tischbein z.B. aus einer Datei einliest (oder programmatisch erstellt), dann HAT es erstmal eine bestimmte Position. Zum Beispiel eben (0,0,0). Dann würde man grob sowas aufbauen wie
Java:
Shape leftLeg = createLeg();
Shape rightLeg = createLeg();  // Bisher liegen die beide bei (0,0,0)

TransformGroup tgForRightLeg = new TransformGroup(0.8,0,0);
tgForRightLeg.addChild(rightLeg); // Verschiebe das rechte Bein um 0.8 nach rechts

TansformGroup tgForWholeTable = new TransformGroup(0,0,0);
tgForWholeTable.addChild(leftLeg);
tgForWholeTable.addChild(tgForRightLeg );

Der Szenegraph wäre dann
Code:
    O  TransformGroup für den Tisch (0,0,0)
    |\
    |  \
    |    \
    |      \
    |       O TransformGroup für das rechte Bein (0.8,0,0)
    |         \
    |           \
    |            |
    |            |
   B0            B1
(0,0,0)       (0.8,0,0)

D.h. man könnte mit der oberen TG den gesamten Tisch im Raum verschieben, und unabhängig davon mit der unteren TG das Rechte Bein relativ zum Linken verschieben.

(Sinnigerweise würde man auch das Linke an eine TG hängen, und sich ggf. was überlegen, damit man durch geeingnete Wahl von Transforms die Breite und Höhe des Tisches ändern kann, aber ... das ist vielleicht hier nicht nötig...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T TransformGroup Listener AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen


Oben