Rotation um verschobene Achse

Status
Nicht offen für weitere Antworten.

schmiddy123

Mitglied
Hi!

Mal wieder ein Rotationsproblem, ich konnts trotz langem Suchen und rumprobieren leider noch nicht lösen.....

Ich habe ein Objekt, sagen wir ein Holzbrett. Dieses soll um die Z-Achse gedreht werden. Mit rotZ(winkel) funktioniert das auch wunderbar, allerdings rotiert es um die markierte Stelle (von vorne betrachtet):


========X======== (Brett)


Was ja auch logisch ist, der Ursprung geht durch das zentrum des Objektes, also wird darum gedreht.

Jetzt will ich aber um den Rand des Brettes drehen. D.h. die Drehung soll gleich ablaufen wie bisher, aber es soll um diesen Punkt gedreht werden:

X================ (Brett)


Wie mache ich das??? Mit setRotation z.B. gehts nicht, da könnt ich ja gleichzeitig um Z und X z.B. drehen, aber ich kann nicht die Lage der Z-Achse verschieben......

Grüße, Chris

[/img]
 

Marco13

Top Contributor
Verschieb' das Brett so weit nach rechts, dass sein linker Rand im Ursprung liegt, mach dann die Drehung, und mach danach die Verschiebung wieder rückgängig.

Für den 2D-Fall kannst du mal hier schauen
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/geom/AffineTransform.html#getRotateInstance(double,%20double,%20double)

3D ists' genauso...

TransformGroup nachRechts = ... new TransformGroup(translate 10,0,0);
TransformGroup drehen = ... new TransformGroup(rotate 0,0,1, alpha);
TransformGroup zurück = ... new TransformGroup(-10,0,0);
zurück.addChild(drehen);
drehen.addChild(zurück);
nachRechts.addChild(dasBrett);

EDIT: Mit der Reihenfolge kommt man doch immer wieder mal durcheinander :oops: ist jetzt korrigiert ... glaubich :rolleyes:
 

schmiddy123

Mitglied
Hmm, war eine meiner ersten Ideen, die aber leider nicht geklappt hat. Jetzt hab ichs dann wegen deiner Antwort nochmal probiert, diesmal tuts. Naja, typisch Informatik. ;-) Auf jeden Fall Danke!!
 

licht400

Bekanntes Mitglied
Hallo, eigentlich habe ich genau das selbe Problem, bekomme es aber nicht gelöst.
Das ganze wird mit JAVA3D gemacht. m
Ich möchte einen Quader um 45 Grad kippen. Das Problem ist, das der Quader in der Mitte des des Körpers gedreht wird und nicht am Fuss, so das es gekippt wird. So, das heißt einfach, ich verschiebe den Quader an die XAchse..

Code:
Box box = new Box(0.08f,0.08f,0.08f, makeAppearance());
PickTool.setCapabilities(box.getShape( Box.TOP),PickTool.INTERSECT_FULL);
PickTool.setCapabilities(box.getShape(Box.BOTTOM),PickTool.INTERSECT_FULL);

Transform3D BoxTransform = new Transform3D();
 Transform3D T3D = new Transform3D();
 T3D.setTranslation(new Vector3f(0.0f,0.0f,0.0f)); //Im NullPunkt, also Mitte des Körpers
 T3D.setTranslation(new Vector3f(0.04f,0.04f,0.0f));//So, die Hälfte von der Breit und Höhe verschoben, so sollte //man dass kippen hinbekommen, will er aber nicht, er dreht immer noch um den Mittelpunkt
 T3D.rotX(Math.PI/-4);

 TransformGroup TGAchse = new TransformGroup(T3D);
 TGAchse.addChild(box);

Wie kann ich das kippen hinbekommen?
 

Developer_X

Top Contributor
Ganz einfach; erst rotation, dann translation
also im KlarText:
Java:
Box box = new Box(0.08f,0.08f,0.08f, makeAppearance());
PickTool.setCapabilities(box.getShape( Box.TOP),PickTool.INTERSECT_FULL);
PickTool.setCapabilities(box.getShape(Box.BOTTOM),PickTool.INTERSECT_FULL);

Transform3D BoxTransform = new Transform3D();
 Transform3D T3D = new Transform3D();
T3D.rotX(Math.PI/-4);
 T3D.setTranslation(new Vector3f(0.04f,0.04f,0.0f));//So, die Hälfte von der Breit und Höhe verschoben, so sollte //man dass kippen hinbekommen, will er aber nicht, er dreht immer noch um den Mittelpunkt
 

 TransformGroup TGAchse = new TransformGroup(T3D);
 TGAchse.addChild(box);
PS: man kann nicht 2 mal translationieren
 

Developer_X

Top Contributor
hey, wenn du eclipse benutzt, und ahung von Java hast, downloade dir diese Jar:
java-forum.org - Blog-Einträge
und dann kannst du ganz einfach dinge positionieren und translantieren.
Sag wenn dus genommen hast,

Adde die Jar zu deinem Class Path, wenn du nicht weißt wies geht, melde dich bei mir mit einer Private Message, und ich erklärs dir
 

Marco13

Top Contributor
:eek: :lol: ???:L
"Diese Klasse wurde mit Hilfe von Marco13 und Mir entwickelt, ich danke Marco13, der einen Teil dieser Jar geleistet hat"

Der Beitrag war zwar nicht explizit unter "CC Attribution License" veröffentlicht, aber ... WENN du dort schon meinen Namen erwähnst, dann bitte relativierend - also, nicht sagen, dass ich "einen Teil" davon geschrieben habe, sondern dass ich alles (außer dem Test und der Methodensignatur (die DU so haben wolltest)) geschrieben habe, und dass ich das Ding im
Originalthread "WierdTransformGroup" genannt hatte.... ;)
 

Illuvatar

Top Contributor
Das Problem bei dir hängt damit zusammen, wie die rotX Methode arbeitet.
API hat gesagt.:
Sets the value of this transform to a counter clockwise rotation about the x axis. All of the non-rotational components are set as if this were an identity matrix.
Das heißt, deine Translation wird von der Methode einfach ignoriert.
Nebenbemerkung: Dass du zweimal direkt hintereinander die Translation setzt ist nicht sonderlich sinnvoll - es schadet zwar nicht, bringt aber auch nix ;)

Es gibt zwei Möglichkeiten, das sinnvoll zu lösen:
  • Mit mehreren Transform3D-Objekten. Du erstellst ein T3D, das den Mittelpunkt an den Rand verschiebt, ein T3D das dreht, und eins das wieder zurückverschiebt. Mit "mul" kannst du die dann in ein T3D zusammenrechnen.
  • Direkt in einem Objekt. Dafür kannst du z.B. diesen Konstruktor verwenden:
    Transform3D (Java 3D 1.5.1)
    Die Transformationsmatrix kannst du dir z.B. über die rotX-Methode in Matrix3d erstellen lassen. Beachten musst du noch: Es wird erst gedreht, dann verschoben. Das heißt, du drehst das Ding um 45° und musst es dann ein bisschen nach oben und zur Seite schieben. Mit einer Skizze kann man leicht rauskriegen, wie viel das "bisschen" genau ist, aber es ist gerade zu spät zum Denken ;) Wenn du magst kann ich das morgen mal probieren - aber vermutlich ist die erste Variante besser. Ich rechne nur immer gern selber^^
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
BraunBerry Rotation mit Radiusänderung Spiele- und Multimedia-Programmierung 0
BraunBerry Rotation von Objekten um ein Raumschiff Spiele- und Multimedia-Programmierung 6
E Rotation um Bildmittelpunkt ohne Affine Transform!!!!! Spiele- und Multimedia-Programmierung 13
RalleYTN LWJGL Rotation Spiele- und Multimedia-Programmierung 1
P Rotation von Sprite klappt nicht Spiele- und Multimedia-Programmierung 4
J Java 3d Rotation Spiele- und Multimedia-Programmierung 6
B j3d Rotation um mehr als eine Achse Spiele- und Multimedia-Programmierung 9
B j3d Kamera Rotation durch Tastendruck Spiele- und Multimedia-Programmierung 12
H Rotation auf Knopfdruck Spiele- und Multimedia-Programmierung 20
T [gelöst] Java3D: Unerwünschte Rotation um die 3.Achse vermeiden? Spiele- und Multimedia-Programmierung 3
W Rotation aller Objekte einer 3D-Szene Spiele- und Multimedia-Programmierung 8
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
E Tetris: Rotation der Tetrominos Spiele- und Multimedia-Programmierung 4
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
aze Transform3D - dauerhafte Rotation Spiele- und Multimedia-Programmierung 3
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
"Er" Kamera rotation in Java3D Spiele- und Multimedia-Programmierung 2
R Tetris Rotation? Spiele- und Multimedia-Programmierung 7
P Figur Rotation Spiele- und Multimedia-Programmierung 14
G rotation eines würfels Spiele- und Multimedia-Programmierung 9
T Java3D: Rotation und Translation Spiele- und Multimedia-Programmierung 2
S Rotation relativ zur Rotation einer anderen Transform Group Spiele- und Multimedia-Programmierung 3
Quaxli Java 3D - Rotation mit Alpha Spiele- und Multimedia-Programmierung 2
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
P Rotation von BufferedImage (Affine Transformation) Spiele- und Multimedia-Programmierung 7
J Problem mit Rotation (Sprite3D) Spiele- und Multimedia-Programmierung 4
S Punkt berechnen, nach Rotation Spiele- und Multimedia-Programmierung 2
W Rotation eines Objektes Spiele- und Multimedia-Programmierung 2
W 3d-rotation Spiele- und Multimedia-Programmierung 4
A 2-Achsen Rotation eines Würfels Spiele- und Multimedia-Programmierung 4
J [JOGL] Kamera zentrieren über Achse Spiele- und Multimedia-Programmierung 4
M 2D - Bild um y-Achse drehen Spiele- und Multimedia-Programmierung 9
S Drehen nur um x-Achse Spiele- und Multimedia-Programmierung 5
A "Textur-Achse" drehen. Spiele- und Multimedia-Programmierung 2
N RotationInterpolator um die eigene X-Achse Spiele- und Multimedia-Programmierung 2
M um eigene Achse drehen Spiele- und Multimedia-Programmierung 3
Tr3kk3r Kamera nur um x und y, nicht um z achse rotieren Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben