# Java3d: Eckkoordinaten ein Box abfragen



## walk_on_deadline (11. Jul 2008)

Hallo Leute,
ich habe ein kleines Problem mit Java3d, ich würde gerne die Koordinaten der Eckpunkte einer beweglichen Box abfragen. Ich habe schon raus gefunden wie ich mir die Koordinaten des Mittelpunktes anzeigen lassen kann, ich vermute mal das ich mir die Box zu einem Shape3D Objekt casten muss, leider sind meine Versuche dann an die Koordinaten der Eckpunkte zu kommen gescheitert. Weiß jemand wie ich dann an die Point3f rankomme?

Gruß Ole


----------



## Marco13 (11. Jul 2008)

Du wirst zuimindest wissen müssen, wie groß deine ursprüngliche Box ist (bzw. wo DORT die Punkte liegen).

Dann kannst du dir mit http://java.sun.com/javase/technologies/desktop/java3d/forDevelopers/J3D_1_3_API/j3dapi/javax/media/j3d/Node.html#getLocalToVworld(javax.media.j3d.Transform3D) die Transform3D des Knotens holen, wo die Box dranhängt. Die Ursprünglichen Punkte kannst du dann mit dieser Transform transformieren, um ihre Lage in der "Welt" zu erhalten.

Falls du also einen Einheitswürfel transformiert hast, bekommst du die Eckpunkte, indem du die Punkte (0,0,0), (0,0,1), (0,1,0) ... (1,1,1) alle durch diese Transform jagst.


----------



## walk_on_deadline (16. Jul 2008)

Erst mal danke für die gute Idee, wenn ich die Eckpunkts als einzelne Punkte betrachte sind schon mal alle Probleme mit normalen Verschiebungen gelöst. Ich habe aber weiterhin ein Problem mit den Rotationen, die Punkte beachten bei der Rotation ja nicht den Abstand zum Mittelpunkt der Box sondern drehen sich nur um sich selbst. Gibt es eine einfache Möglichkeit bei der Rotation einen Ursprung anzugeben? Das einzige was mir einfällt wär den Abstand zu Boxmittelpunkt bestimmen dann den punkt dahin verschieben, die Transformation anwenden, den Punkt danach wieder zurück verschieben, rotieren und dann die Transformation anwenden. Aber das erscheint mir doch als ziemlich gefrickelt. Gibt es keinen Möglichkeit an die Position der Punkte einer Box ranzukommen, wie sieht es aus wenn ich keine fertige Box verwende sondern mir eine mit punkten selbst baue? Oder wenigsten eine einfache Möglichkeit einen Ursprung für die Rotation anzugeben?

Gruß Ole


----------



## Marco13 (16. Jul 2008)

Hab' die Frage jetzt nicht ganz verstanden: Wenn man eine Box mit Punkten (0,0,0), (0,0,1), (0,1,0) .... (1,1,1) hat, und diese dann rotiert, dann wird sie um ihren Ursprung gedreht. In der Matrix, die man mit der angegebenen Methode erhält, sind ALLE Transformationen zusammengefasst, die auf die Box angewendet wurden. Wenn man dann den Punkt 1,1,1 mit dieser Transform transformiert, erhält man die Position, wo der Punkt ganz am Ende liegt. Falls ich mich nicht gerade schwer irre.


----------



## walk_on_deadline (16. Jul 2008)

Hm dann hatte ich vielleicht deinen ersten Post nicht richtig verstanden, ich hatte jetzt einzelne Punkte definiert, die auf den Eckpunkten der Box lagen, die habe ich dann in gleichweise wie die Box verschoben, das klappt bei Verschiebungen aber leider nicht bei Rotationen weil einzelnen Punkte ja ihr eigener Ursprung sind. Aber offensichtlich hatte ich da was noch nicht ganz richtig verstanden.


----------



## Marco13 (16. Jul 2008)

Ja nee ... ein bißchen Pseudocode:

```
Box b = new Box(0,0,0,   0,0,1,   .... 1,1,1); // Box aus Eckpunkten

// Szenegraph aus Rotationen und Translationen zusammenbauen
translation0.addChild(box);
rotation0.addChild(translation0);
translation1.addChild(rotation0);
rotation1.addChild(translation1);
root.addChild(rotation0);

// Transform vom letzten Node holen (wo die Box drin ist)
translation0.getLocalToVworld(transform);

Point p = transform.transform(1,1,1); // p ehthält jetzt die finalen Weltkoordinaten des Punktes 1,1,1 der Box
```
Müßte grob(!!!) so gehen...


----------



## Backe (12. Jan 2009)

Ich versuche die Koordianten (Mittelpunkt) von Kugeln und Würfeln zu bekommen. Weiß leider nicht, wie ich das machen soll. Gibt es eine Methode die mir diese Koordianten ausliest?

LG
Backe


----------



## Marco13 (12. Jan 2009)

Kommt drauf an, wie die Kugeln und Würfel ursprünglich lagen. Im einfachsten Fall kann man sich mit getLocalToVWorld die Transformation der jeweiligen Objekte holen, und mit dieser Matrix dann den Punkt (0,0,0) transformieren (bzw. den Translationsanteil auslesen). Ansonsten ... musst du eine präzisere Frage stellen.


----------



## Backe (12. Jan 2009)

Ja, die Kugel liegt im Ursprung. Wie genau hole ich mir dann die Koordinaten mit getLocalToVWorld?
Ich würde sie gerne Ausgeben.
Kann da jemand mal ein bissle Code hochladen (kein Pseudocode).


----------



## mattn (3. Aug 2010)

weiß da es noch nicht erledigt ist ... 

kann sein das es da einfache wege gibt aber 
so aus dem stehgreif würd ich folgendes raten...


hol dir die koordinaten des würfels  und da du die seitenlänge kennst....kommst du via rechtwinklichen dreieck an die eckkoordinate...


----------

