J3D gepicktes Primitive verschieben(fix mit Mauszeiger)

mattn

Aktives Mitglied
wollt ja eig nix neues auf machen aber ich such schon den ganzen tag....und ich befürchte das java3d diese fkt nicht hat...kanns mir eig nicht so recht vorstellen....

im Prinzip such ich sowas wie PickTranslateBehavior und PickZoomBehavior...nur das Problem bei den Teilen ist, das sich je nach Entfernung der ViewingPlattform zum Objekt ... das Objekt mehr oder weniger schneller bzw langsamer als der Mauszeiger bewegt....

is das so schwer eswas zu finden, wo ich das Primitive Objekt an meinen Mauszeiger "kleben" und dabei verschieben kann oder stell ich mich einfach nur zu doof an?
 

mattn

Aktives Mitglied
die position des mousepointer auslesen stellt ja kein problem dar... aber das dann in die lokalen koordinaten umzuschreiben klappt leider noch nicht

hab leider immernoch keine lösung gefunden:rtfm:
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ich dufte das mal für einen anderen Szenegraphen nachbauen... das war toll... Also, das kann ein bißchen fummelig werden, aber zum Glück bietet Java3D alle Funktionen, die man dafür braucht, und damit dürfte es nicht mehr sooo schwer sein. Man muss die Bewegung, die die Maus macht, umrechnen auf eine Bewegung in der Welt. Die Methoden, die man dafür braucht, sind die ganzen Methoden, in deren Namen "ImagePlate" auftaucht, z.B. : Class Canvas3D.

Der grundsätzliche Ablauf ist grob sowas:
Beim MousePressed merkt man sich den Punkt, an dem geklickt wurde (mouseEvent.getPoint())
Mit getPixelLocationInImagePlate rechnet man diesen Punkt in einen Punkt auf der ImagePlate um
Diese Punkt transformiert man mit der Matrix, die man bei getImagePlateToVworld bekommt.
Damit hat man den Klickpunkt in Weltkoordinaten.
Bei jedem MouseMoved macht man das gleiche für die aktuelle Mausposition, und erhält damit den Punkt der Mausposition in Weltkoordinaten.
Den Klickpunkt und den aktuellen Mauspunkt zieht man voneinander ab, um die aktuelle verschiebung des Objektes zu bekommen.
 

Ähnliche Java Themen


Oben