[JAVA 3D] Position des Objektes verändern

mattn

Aktives Mitglied
Hi,
ich will einfach die Position eines Würfels per Translation in alle Achsen verschieben...
ich habe bis jetzt nur Beispiele gesehen, wo man nur die Position des viewingPoint ändert.

kann mich da jemand helfen.... bin leider erst frisch dabei im J3D:)
 

truesoul

Top Contributor
Transform3D ist das was du suchst .

Java:
TransformGroup objekt = new TransformGroup();
Transform3D dreiD = new Transform3D();

dreiD.setTranslation(new Vector3f(0.0f,0.0f,0.0f));

objekt.setTransform(dreiD);

wobei bei Vector3f(X-Achse,Y-Achse,Z-Achse) steht.
 

mattn

Aktives Mitglied
ja sowas hab ich schon einmal ausprobiert war aber der meinung das sich die position des objektes selbst nicht ändert sondern nur der view ... ok danke :)

mal schaun ob ich das so genaut bekomm, das ich das objekt einfach mit der maus verschieben kann^^
 

truesoul

Top Contributor
Wenn du das Objekt mit der Maus bewegen willst gibt es dafür z.B
Java:
 new PickTranslateBehavior()
 

mattn

Aktives Mitglied
ja schon.. mein eclipse mag das teil nicht ^^ wird durchgestrichen (muss also was "besseres" geben)... deswegen hat ich es schonmal drin aber wieder raus genommen..weil ich es auch noch nicht so richtig hinbekommen habe
 

truesoul

Top Contributor
Versuche mal das hiermit:

Java:
import com.sun.j3d.utils.picking.behaviors.PickRotateBehavior;
import com.sun.j3d.utils.picking.behaviors.PickTranslateBehavior;
import com.sun.j3d.utils.picking.behaviors.PickZoomBehavior;


....

BranchGroup objWurzel = new BranchGroup();


private TransformGroup erstelleBehaviorsGruppe()
  {       
        TransformGroup Gruppe = new TransformGroup();
        Gruppe.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        Gruppe.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        Gruppe.setCapability(TransformGroup.ENABLE_PICK_REPORTING);

        pickzoom = new PickZoomBehavior(objWurzel, canves3D, new BoundingSphere(new Point3d(), 100));
        pickDreh = new PickRotateBehavior(objWurzel, canves3D, new BoundingSphere(new Point3d(), 100));
        picktrans = new PickTranslateBehavior(objWurzel, canves3D, new BoundingSphere(new Point3d(), 100));
        pickDreh.setTolerance(0f);

        Gruppe.addChild(pickDreh);
        Gruppe.addChild(pickzoom);
        Gruppe.addChild(picktrans);

        return Gruppe;
  }

ObjWurzel.addChild(erstelleBehaviorsGruppe());

Damit sollte es klappen.
Wenn du mehrere Objekte hast kannst du jedes für sich bewegen.
Willst du aber das mit setTranslation machen musst Picking verwenden um herauszufinden welches Objekt angewählt wurde , um es dann bewegen zu können.
Aber das ist mal eine andere Geschichte ;)
 

mattn

Aktives Mitglied
ok danke schonmal... ich bekomms zwar nicht auf die reihe...bin einfach zu doof -.-
mir fällt der Anfang mit j3d bisschen schwer...???:L

naja zumindest hab ich schonmal ein wenig code von dir, der auch bestimmt funktioniert...

nun muss ich das nur noch auf die reihe bekommen .... kann ja von dir nicht verlagen das du meine 'arbeit' machst ...danke nochmal
 

truesoul

Top Contributor
Einfach mal bei Google Michael Pfeiffer j3d eingeben und die pdf downloaden ...
Für Einsteiger sehr verständlich und mit vielen Beispielen und man kann Aktiv den Code testen und verstehen.

Mfg
 

mattn

Aktives Mitglied
hab schon etliche pdf´s offen gehabt aber das war noch nicht dabei....
gut ich werd mal das j3d vakuum in meinem kopf füllen ... hoff ich zumindest ;)

dank dir auf jedenfall für deine hilfe:toll:
 

mattn

Aktives Mitglied
ich hab mal nen codefragment hier im forum genommen, angepasst und läuft (find leider den post - für nen richtiges zitat grad nicht)
jetzt ist nur die frage ... wie mach ich dir transformation in die z-achse.... weil zoom zoomt ja nur rein.. oder ?!?

//der BoxTG die Transformationen mit der Maus erlauben
BoxTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
BoxTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

BoundingBox boundBox=new BoundingBox (new Point3d(-1000,-1000,-1000),new Point3d(1000,1000,1000));

//rotieren mit der linken Maustaste
MouseRotate behavior = new MouseRotate(BoxTG);
behavior.setTransformGroup(BoxTG);
behavior.setSchedulingBounds(boundBox);
BoxTG.addChild(behavior);

//verschieben mit rechter Maustaste
MouseTranslate mouseTranslate= new MouseTranslate(BoxTG);
mouseTranslate.setSchedulingBounds(boundBox);
BoxTG.addChild(mouseTranslate);

//zoomen mit mittlerer Maustaste
MouseZoom mouseBeh2=new MouseZoom(BoxTG);
mouseBeh2.setSchedulingBounds(boundBox);
BoxTG.addChild(mouseBeh2);
 

truesoul

Top Contributor
Translate bewegt sich auf X-Achse und Y-Achse ( in Negativen sowie Positiven Koordinatenbereich ).
Rotate ist klar ...
Und Zoomen geschieht auf der Z-Achse (rein & raus), siehe KoordinatenSystem java3d.
 

mattn

Aktives Mitglied
jap soweit klar...
also beweg ich wirklich das objekt und nicht meinen viewpoint :) ..gut gut
lol ich seh grad ... ich kann überall hinklicken(also auch neben das objekt) und es rotiert transformiert und zoomt trotzdem ... ich denk mal da werd ich wohl doch das picking nutzen müssen... damit die events nur ausgeführt werden wenn ich mit der maus auf dem objekt bin
 

mattn

Aktives Mitglied
ok also nen groben fehler hab ich schonmal rausgebügelt....die picktranslate methode war an der falschen stelle ...
mit einen würfel gehts schonmal ^^
ABER...
also ich hab es soweit das ich (aus testzwecken) 500(formatiert) oder auch mehr(ab 501 unformatiert) würfel ausgebe...
nun wollt ich jeden würfel einzeln verschieben... und hier ist der knackpunkt.
wenn ich den würfel anklick und dann verschieben will, verschwindet er einfach...need HELP :eek:

Java:
//Startwerte für die Generierung der Würfel im festgelegtem Layout(bis 500 Knoten)
                x=(float)-0.5;        
                y=(float)-0.5;        
                n= anzahlWuerfel;                
                //Generierung der Knoten
                for(i=0; i<n; i++){
                        switch(i){
                                case 50:  { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;} //x Wert wird für nächste Zeile zurückgesetzt
                                case 100: { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;}
                                case 150: { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;}
                                case 200: { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;}
                                case 250: { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;}
                                case 300: { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;}
                                case 350: { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;}
                                case 400: { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;}
                                case 450: { y= (float)(y + 0.025);
                                                        x=(float)-0.5;  break;}
                        }
                       
                        TransformGroup BoxTG = new TransformGroup();
                        Transform3D BoxT3D = new Transform3D();
                       
                        BoxT3D.setTranslation(new Vector3f((float)x,(float)y,0f)); // x und y damit die Knoten als "Feld" ausgegeben werden
                        BoxTG.setTransform(BoxT3D);
                        BoxTG.addChild(new Box(0.01f,0.01f,0.01f, BoxAppearance));
                        x= (float) (x+ 0.025);
                       
                        BoxTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                        BoxTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
                        BoxTG.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
                        //PickTranslateBehavior
                        PickTranslateBehavior pickT = new PickTranslateBehavior(rootBG, c, BigBounds);
                        rootBG.addChild(pickT);
                        rootBG.addChild(BoxTG);
                }
 
Zuletzt bearbeitet:
S

Sosososo

Gast
Hast du die Objekt Skaliert(setScale()) ?
Ich vermute mal das das Objekt einfach aus dem Sichtfeld verschwindet weil es beim anklicken zu groß oder zu klein geworden ist.
 

mattn

Aktives Mitglied
Hast du die Objekt Skaliert(setScale()) ?
Ich vermute mal das das Objekt einfach aus dem Sichtfeld verschwindet weil es beim anklicken zu groß oder zu klein geworden ist.

nein ich skaliere nirgendwo
...
so... ich habe mich mal an die sache angenähert....

die würfel verschwinden nicht, sondern bewegen sich mit steigender anzahl immer schneller...also auch schon bei minimaler mausbewegung...
--> die translations "sprünge" werden immer größer
...ich weiß nicht ob man das so versteht wie ich es erklär^^
wenn ich ein objekt verschiebe ändert die translation ja die position...
leider "folgt" das objekt nicht dem mauszeiger, sondern bewegt sich schneller als der zeiger...und das schnellere bewegen wird proportional schneller (oh man was für eine formulierung Laughing) je mehr objekte im universe sind
 

truesoul

Top Contributor
Hallo mattn .

So ich habe mal hier ein wenig code für dich .
Java:
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.behaviors.mouse.MouseBehavior;
import com.sun.j3d.utils.behaviors.mouse.MouseBehaviorCallback;
import com.sun.j3d.utils.behaviors.picking.*;
import javax.media.j3d.*;


public class PickTranslateBehavior extends PickMouseBehavior 
        implements MouseBehaviorCallback
{
    MouseTranslate translate;
    int pickMode = PickObject.USE_BOUNDS;
    private PickingCallback callback = null;
    private TransformGroup currentTG;



    public PickTranslateBehavior(BranchGroup root, Canvas3D canvas, Bounds bounds)
    {
        super (canvas, root, bounds);

        translate = new MouseTranslate(MouseBehavior.MANUAL_WAKEUP);

        //**********************************//
        // Hier stelle ich die geschwindigkeit ein!!!
        // *********************************//
        translate.setFactor(0.01);


        translate.setTransformGroup(currGrp);

        currGrp.addChild(translate);
        translate.setSchedulingBounds(bounds);
        this .setSchedulingBounds(bounds);
    }



    public PickTranslateBehavior(BranchGroup root, Canvas3D canvas,
            Bounds bounds, int pickMode) {
        super (canvas, root, bounds);
        translate = new MouseTranslate(MouseBehavior.MANUAL_WAKEUP);

        translate.setTransformGroup(currGrp);
        currGrp.addChild(translate);
        translate.setSchedulingBounds(bounds);
        this .setSchedulingBounds(bounds);
        this .pickMode = pickMode;
    }



    public void setPickMode(int pickMode) {
        this .pickMode = pickMode;
    }



    public int getPickMode() {
        return pickMode;
    }


    public void updateScene(int xpos, int ypos) {
        TransformGroup tg = null;
        if (!mevent.isAltDown() && mevent.isMetaDown()) {

            tg = (TransformGroup) pickScene.pickNode(pickScene
                    .pickClosest(xpos, ypos, pickMode),
                    PickObject.TRANSFORM_GROUP);

            //Check for valid selection.
            if ((tg != null)
                    && (tg
                            .getCapability(TransformGroup.ALLOW_TRANSFORM_READ))
                    && (tg
                            .getCapability(TransformGroup.ALLOW_TRANSFORM_WRITE))) {

                translate.setTransformGroup(tg);
                translate.wakeup();
                currentTG = tg;
            } else if (callback != null)
                callback
                        .transformChanged(PickingCallback.NO_PICK, null);
        }

    }


    public void transformChanged(int type, Transform3D transform) {
        callback.transformChanged(PickingCallback.TRANSLATE, currentTG);

    }


    public void setupCallback(PickingCallback callback) {
        this.callback = callback;
        if (callback == null)
            translate.setupCallback(null);
        else
            translate.setupCallback(this);
    }

}

In Zeile 27 habe ich jetzt sozusagen die Geschwindigkeit eingestellt , wobei es nicht Wörtlich die Geschwindigkeit ist ;)
Entweder übernimmst du die Klasse .(imports beachten)
Oder machst dir gedanken wie man es anders lösen kann ;)

Mfg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
A Minecraft Java Buch fehlermeldung Spiele- und Multimedia-Programmierung 67
yakazuqi Minecraft java.lang.Error: Watchdog Spiele- und Multimedia-Programmierung 3
L Fehler bei "Nochmal Spielen" (Java) Spiele- und Multimedia-Programmierung 1
N Minecraft Java Error Spiele- und Multimedia-Programmierung 6
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
1Spinne Minecraft Fabric Modding Java Error Spiele- und Multimedia-Programmierung 2
Joris Minecraft Minecraft Java Server Spiele- und Multimedia-Programmierung 6
Shanic Minecraft Minecraft Forge Server "Falsche Java Version" Spiele- und Multimedia-Programmierung 6
O Browser-basiertes online Pokerspiel mit Java Spiele- und Multimedia-Programmierung 1
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
G VST-Plugins in Java verwenden Spiele- und Multimedia-Programmierung 0
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
C Java findet FluidSynth nicht Spiele- und Multimedia-Programmierung 2
I Java Andere Fenster in Borderless-Mode setzen Spiele- und Multimedia-Programmierung 16
leon_krys Java-Bußgeldrechner Spiele- und Multimedia-Programmierung 5
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
P Website mit Java Backend? Spiele- und Multimedia-Programmierung 1
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J Fertigungstechnik.. PLS HALP.. Quellcode vom Text in java-Klasse speichern Spiele- und Multimedia-Programmierung 2
E Kalah Java Implementation Spiele- und Multimedia-Programmierung 1
G [Java] Vereinfachung von Boolean Abfragen Spiele- und Multimedia-Programmierung 3
G [LibGDX/Java] ArrayList Object Speicher Spiele- und Multimedia-Programmierung 3
T Java 3D Spiele- und Multimedia-Programmierung 2
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
J Java Buttons Spiele- und Multimedia-Programmierung 6
T Java Kalender Spiele- und Multimedia-Programmierung 5
Ice4P4rty Java Optische Oberfläche Spiele- und Multimedia-Programmierung 2
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
N Spiele-Menü in Java Spiele- und Multimedia-Programmierung 9
J HDMI Ausgänge mit Java programmieren? Spiele- und Multimedia-Programmierung 18
H Yu-Gi-Oh! Mit Java was tun? Spiele- und Multimedia-Programmierung 6
G Component System Java 2D Game LibGDX Spiele- und Multimedia-Programmierung 6
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
C Java aus Klasse rausgehen Spiele- und Multimedia-Programmierung 2
MaxG. Java Internet Radio Spiele- und Multimedia-Programmierung 6
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
P java.lang.NoClassDefFoundError: in Greenfoot Spiele- und Multimedia-Programmierung 0
G Java Achsen invertieren Spiele- und Multimedia-Programmierung 2
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
$ Einstieg in Java Game Development Spiele- und Multimedia-Programmierung 11
BraunBerry Java Game Pixel "einfärben" Spiele- und Multimedia-Programmierung 6
BraunBerry Java Game verbesserte Kollisionserkennung Spiele- und Multimedia-Programmierung 18
BraunBerry Java Game Waypoint System Spiele- und Multimedia-Programmierung 3
S Hilfe bei Java Gui Spiele- und Multimedia-Programmierung 2
D Java sound pulseaudio Spiele- und Multimedia-Programmierung 0
David Schwarzbeck Java 3 dimensionale Kollisions Abfrage Spiele- und Multimedia-Programmierung 2
M Gesellschaftsspiel Mühle in Java programmieren Spiele- und Multimedia-Programmierung 3
beatles Java Minesweeper - OS X und Win7 Unterschied Spiele- und Multimedia-Programmierung 2
D Minecraft Java JDK installiert - Minecraft läuft nichtmehr in 64 Bit Spiele- und Multimedia-Programmierung 2
E TMX - Dateien in Java laden Spiele- und Multimedia-Programmierung 1
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
windl MoviePlayer in Java Spiele- und Multimedia-Programmierung 0
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F Klausurersatz: Ein Java-Programm erstellen und dieses präsentieren. Spiele- und Multimedia-Programmierung 2
E Java Jump and Run Map zu groß Spiele- und Multimedia-Programmierung 14
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
J programm mit java-plugin Spiele- und Multimedia-Programmierung 2
D Java Webgame, welche Frameworks oder Techs sind von Nöten? Spiele- und Multimedia-Programmierung 5
P Java 2D Bug? Spiele- und Multimedia-Programmierung 8
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
R Java App sendet Midi Daten über Flash Spiele- und Multimedia-Programmierung 3
O Java Zeile aus Textdatei zufällig ausgeben Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
T Alle Referenzen zu einer Klasse aus Java Bytecode ersetzt, JVM sucht trotzdem diese Klasse Spiele- und Multimedia-Programmierung 1
J Java Kollisionsabfrage Spiele- und Multimedia-Programmierung 21
Flo. android java tastatureingaben abfangen. Spiele- und Multimedia-Programmierung 1
J Java Steuerberechnung hilfe Spiele- und Multimedia-Programmierung 17
C Export als .jar funktioniert nicht richtig (JAVA 3D) Spiele- und Multimedia-Programmierung 5
P Java Grafiken mit Rechnungen verknüpfen Spiele- und Multimedia-Programmierung 4
U Minecraft Mit Java auf Minecraft Server anmelden Spiele- und Multimedia-Programmierung 11
F Das sag mir einer Java ist plattform unabhänig ! Spiele- und Multimedia-Programmierung 10
C virtueller stereomix (java sound API) Spiele- und Multimedia-Programmierung 0
S Engine2D - Java 2D Engine Spiele- und Multimedia-Programmierung 20
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
C Java Kollisionserkennung Spiele- und Multimedia-Programmierung 4
U Blender in Java Spiele- und Multimedia-Programmierung 8
J Java Fussballspiel Player-KI in der Bewegungsphase Spiele- und Multimedia-Programmierung 4
K Java 15/Slide/Boss Puzzle Spiele- und Multimedia-Programmierung 2
T Java 3D - Step oder IGES Spiele- und Multimedia-Programmierung 1
H 3D Spiele mit Java - Diskussion Spiele- und Multimedia-Programmierung 35
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
M Bilder in Java Spiele- und Multimedia-Programmierung 7
A Minecraft Java Ubuntu Minecraft Server startet nicht - ERROR (SIGSEGV) Spiele- und Multimedia-Programmierung 7
N Minecraft java lernen minecraft Spiele- und Multimedia-Programmierung 20
J 2d Ansicht mit Java 3d Spiele- und Multimedia-Programmierung 13
F Abbyy finereader aus java starten, Ergebnis zurück? Spiele- und Multimedia-Programmierung 2
P Zeichenübungen mit Java Spiele- und Multimedia-Programmierung 4
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
I Minecraft Java programmierungs fehler "MineCraft" Spiele- und Multimedia-Programmierung 6
J Java 2D Sicht Spiele- und Multimedia-Programmierung 13
H wma Datei abspielen: java.io.IOException: Resetting to invalid mark Spiele- und Multimedia-Programmierung 11
M Würdet ihr sagen Java Applets eignen sich gut Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen


Oben