j3d, kamera auf sphere, sowie kameraflüge

Status
Nicht offen für weitere Antworten.

jimbo0815

Mitglied
hallo leute,

ich bin leider neuling in java3d und habe daher ein kleines problem: wie kann ich die ViewingPlatform auf eine Sphere setzen? ich möchte ein sonnensystem basteln, bei dem man wahlweise aus den weiten des alls und von der erde aus schauen können soll. ferner ist noch ein kameraflug geplant. könnt ihr mir ein paar ratschläge diesbezüglich geben?

gruß,
jimbo0815
 

dergrüne

Aktives Mitglied
Hi,

bin auch noch nicht solange mit Java3D vertraut, aber evtl. helfen dir meine Tips.

Wenn du die folgenden drei Zeilen einbaust, kannst du dich schonmal auf deinem canvas3D frei mit der Maus bewegen und auch zoomen.

Code:
            OrbitBehavior orbit = new OrbitBehavior(c3d, OrbitBehavior.REVERSE_ALL);
	    orbit.setSchedulingBounds (new BoundingSphere ());
	    simpleU.getViewingPlatform().setViewPlatformBehavior (orbit);

c3d ist in dem Fall dein canvas3d.

Um einen Kameraflug zu machen gibt es imho zwei Möglichkeiten, entweder bastelst du dir eine Behaivor, der dann über eine Schleife die Vektoren verändert und du somit eine vorgefertigte Strecke abfliegen kannst.

Oder du steckst, das komplette Sonnensystem in einen PositionPathInterpolator, da kannst du auch eine Strecke definieren die in einer gewissen Zeit abgeflogen werden soll. Damit kannst du auch Beschleunigungen realieren, falst du an einem Planeten langsamer werden willst oder so. Ist zwar etwas kniffelig, den erst mit einem klicken zu starten geht aber.

Hoffe das konnte schonmal ein wenig helfen.

mfg
 

jimbo0815

Mitglied
hi,

danke für die hilfe. ich habe habe nun folgendes problem. ich lege mit
Code:
orbit.setSchedulingBounds(new BoundingSphere(new Point3d(1.0,2.0,3.0),Double.MAX_VALUE));
simpleU.getViewingPlatform().setViewPlatformBehavior(orbit);

die kamera nach [1,2,3]. aber wenn ich diese zeilen ausführen lasse ändert sich nichts (als würden sie ignoriert, aber sie werden definitiv ausgeführt). ändere ich aber den blickwinkel mit
Code:
View v = simpleU.getViewer().getView();
v.setFieldOfView(irgendwas);
so wird diese änderung dargestellt. kann ich irgendwo einen parameter falsch gesetzt haben, sodass die änderungen von oben ignoriert werden?

gruß,
jimbo0815
 

merlin2

Top Contributor
Obige Zeilen ändern die Kameraposition nicht. [1,2,3] ist der Mittelpunkt der Kugel, in der das OrbitBehavior reagiert.
 
B

BlindGuard

Gast
Dum Di Dum... Irgendwie werd ich das Gefühl nicht los, dass wir die gleiche Aufgabe machen müssen :roll:

;)

Ich hänge hier aber auch grad rum und ärger mich wie sonst was, weil das alles nicht so funktioniert wie ich mir das vorgestellt habe...
Die "Kamera" bewegen, ja, das hab ich hingekriegt.
Code:
//Mit der View rumspielen.
        Transform3D saveT3D = new Transform3D();
        viewPlatform.getViewPlatformTransform().getTransform(saveT3D);
        float pos = 25f;
        saveT3D.setTranslation(new Vector3f(0f, 15f, pos));
        saveT3D.setRotation(new AxisAngle4f(1f, 0f, 0f, (float) Math.toRadians(-30)));
        viewPlatform.getViewPlatformTransform().setTransform(saveT3D);
Das stellt die Kamera etwas weiter zurück und fixiert den Blickpunkt ungefähr wieder auf den 0,0,0 Punkt.
Das sollte bei dir dann auch so funktionieren.


Das Problem das sich jetzt stellt ist, dass ich nicht mehr auf meine "Objekte" zugreifen kann :(

Also in Kurz: Wir sollen ein Sonnensystem modellieren. Mit drehenden Planeten und allem drum und dran.

Mein Problem ist grad noch, wie komm ich an die "Werte" der eingefügten Objekte?
Weil ich bau mir meinen Branch-Tree, dann da die TransformGroups rein mit den Planeten und die Rotationen usw....

Aber wenn ich jetzt mit meinem View zB einem Planeten gerne folgen würde. Wie mach ich das? Ich hab irgendwie das Gefühl, dass das Objekt (ein Planet zB) irgendwie "weg" ist, nachdem man den eingefügt hat..

Gibt es eine Möglichkeit, die aktuellen Koordinaten der Sphere herauszukriegen, NACH den ganzen Transformationen?

Weil dann wäre das kein Problem wenn ich dem irgenwie sagen könnte, Rotate, Translate, Schwing, Schwang und dann die Sphere dranhängen. Dann aus der TransformGroup raus und dann von aussen die aktuellen Koordinaten der Sphere abfragen.
Geht sowas? (Sorry, das der Text jetzt so lang geworden ist. Bin hier aber auch grad am Verzweifeln :( )

Wäre über Tipps wirklich dankbar :(

Bye,
BG
 

jimbo0815

Mitglied
hallo, hmmm....klingt nach der guten alten goethe-uni ;)

danke soweit! ich habe mitlerweile aus diversen beiträgen in diesem forum kameraflüge realisiert, hänge aber ebenso daran, die aktuellen koordinaten meiner TransformGroups zu bestimmen und die kamera genau zu diesen fliegen zu lassen.

ein weiteres ungelöstes problem ist, dass ich keine ahnung habe, wie ich die kamera an ein objekt binden kann, in diesem fall wäre dies eine TransformGroup TransformGroup tgErde. die kamera soll mit der erde mitfliegen. ich habe stundenlang gegoogelt und natürlich auch selbst herumprobiert, doch leider habe ich bisher nichts brauchbares finden können.
 

jimbo0815

Mitglied
ok, habs jetzt...
die positionen der planeten kann man über deren alphas bestimmen. wenn das alpha der erde alphaErde heisst, dann bekommst du über alphaErde.value einen wert zwischen 0 und 1, der angibt (prozentual), wie weit die bewegung des alphas, also die umdrehung um die sonne abgeschlossen ist. bei 1 läuft er wieder von 0 los. anhand dieses werts kann man den winkel ausrechnen, den die verbindung planet-sonne mit der x-achse aufspannt und wenn du dann noch den radius des kreises, den der planet beschreibt hinzunimmst kannst du daraus dessen koordinaten berechnen.

ich hoffe dies ist ein hilfreicher anstoß ;)
noch weiterhin "frohes schaffen"
 
B

BlindGuard

Gast
Puuhh.... ich glaub, da "schummel" ich lieber ein bisschen und kreiere ein stehendes Modell an dem ich die Kamera-Bewegung durchführe.
Das Thema ist ja immerhin "Lügen mit Bildern". ;)

Hast du das mit dem Bump-Mapping hingekriegt? Da häng ich ja ziemlich :(
 

jimbo0815

Mitglied
Ich bin mir nicht sicher, ob es reicht wenn die Planeten sich nicht bewegen. Ich war heute beim Meister und er meinte, wir sollen auch die Kamera rotieren lassen, wenn sie auf der Erde sitzt, sodass die Sonnenfinsternis bei rotierender Erde zu sehen ist :(

Nein, damit habe ich leider noch nicht angefangen. Kommt noch....eine gute Hilfe hierfür soll aber link sein. Wenn ich was habe werde ich mich melden.
 
B

BlindGuard

Gast
Also langsam glaub ich ja die haben 'ne Meise.. Ich sitz hier garantiert schon über 60 Stunden an dem Rotz und verzweifel immer wieder an diesem blöden Java3D... Blöde "Fingerübung"...
Die Aufgaben letztes Jahr waren auch immer so überdimensioniert. Die sollten mal etwas realistischer werden... So ein Blödsinn....
Das mit dem Bump-Mapping hab ich auch schon mal gesehen... Aber so richtig schlau daraus werd ich nicht.. Naja, mal sehen.
Argh.....
 
D

Der Dritte

Gast
Da bist du sicher nicht der einzige, der solange an der Aufgabe sitzt!

Habe auch noch die Sonnenfinsternis vor mir und mir fehlt sogar noch die Idee, wie ich es lösen könnte ;)

Gruß
 
B

BlindGuard

Gast
Pfff.... ich kriegs jetzt seid 3 Tagen (ca. 20 Stunden) NICHT HIN meine scheiß Kamera in einen Interpolator zu verpacken...
Mit dem SimpleUniverse kommt man ja nicht weit, da man da die den ViewTransform nicht verändern kann.
Hab jetzt den ganzen Tag gebraucht um mein eigenes Universum aufzustellen, da ich mich im ViewPlatform vs. ViewingPlatform Wirrwarr verloren habe. Und jetzt krieg ichs TROTZDEM NICHT HIN!

Ich KOTZE! Vor allem, wenn man so im Internet liest, findet man nur, dass die ViewPlatform von Java ja soooo schlecht dokumentiert ist. Das ist wohl wahr... Wieso zum Geier müssen wir's dann machen? Alter Schwede. Solch unrealistische Aufgabenstellungen. ich könnte echt kotzen!

Bye,
BG....
 

Illuvatar

Top Contributor
Hmm eigenes Universe ist glaub ne ziemlich komplizierte Angelegenheit... hast du mal folgendes probiert?

- Eigener Behavior, der bei jedem Frame ausgeführt wird:
- Absolute Position des Objekts, an dem die Kamera hängen soll, herausfinden (getLocalToVWorld oder so)
- Kamera da hin setzen (oder noch bissle nach hinten, so wie du es eben willst)
 
B

BlindGuard

Gast
- Eigener Behavior, der bei jedem Frame ausgeführt wird:
Das probier ich gerade. Auf die Idee bin ich auch vor 'ner halben Stunde gekommen... Muss mich aber erst noch in den Behaviors zurechtfinden ;)
Absolute Position des Objekts, an dem die Kamera hängen soll, herausfinden (getLocalToVWorld oder so)
Das ist auch ein Problem, da wir ja ca 15 Objekte haben und ich war so clever und lass mir die durch eine Methode erstellen. Das funzt auch super, nur leider habe ich, sobald die erst mal Live sind, keinerlei Möglichkeit die zu unterscheiden :oops:

Alles blöder Kram.... :(
 

Illuvatar

Top Contributor
Also, wie du an das richtige Objekt rankommst, musst du wissen, aber das wird ja wohl irgendwie möglich sein ;)

Ein bisschen (ungetesteter, aber compilieren tut es ;)) Beispielcode für den Behavior:

Code:
class MyBehavior extends Behavior
{
    @Override
    public void initialize()
    {
        wakeupOn(new WakeupOnElapsedFrames(0));
    }

    @Override
    public void processStimulus(Enumeration arg0)
    {
        Transform3D bindTo = new Transform3D();
        deineTransformGroup.getLocalToVWorld(bindTo);
        universe.getViewingPlatform().getViewPlatformTransform().setTransform(bindTo);
        wakeupOn(new WakeupOnElapsedFrames(0));
    }
}

Edith meint: natürlich getLocalToVWorld, nicht getTransform ;)
 
B

BlindGuard

Gast
Boaahhh... ich sehe Licht... Das gibts ja net.. Meine Kamera bewegt sich.. (Habe den Behaviour von hier verändert http://www.newdawnsoftware.com/tutorials/Tutorial04/index.html).
Dann schön mit LookAt die Objekte anvisieren und rumfliegen.

Sonnenfinsternis fertig, Planetensytem auch (naja, da muss ich noch mal die Rotationen überprüfen, aber eigentlich sollte es klappen).
Kamerafahrt mach ich wie gesagt am stehenden Objekt. Alles andere ist mir jetzt ZU stressig.
Fehlt nur noch das Bump-Mapping und Code-Optimierung morgen.. Mal gucken ob ich das hinkrieg ;)

Zu diesem "Wie finde ich mein Objekt wieder" Problem:
Die Sache ist die, ich habe meine Klasse, der gebe ich die einzelnen Daten (also Durchmesser, Entfernung, Rotationsachse usw...). Die ruf ich halt für jeden Planeten einmal auf und bekomme eine Branchgroup als Return, die ich dann in meinen Conten-Graph reinpacke.
Das Problem ist halt, dass die für mich dann so gut wie unerreichbar sind, da die Dinger ja keinen Namen haben (kann man Branchgroups durch feste Namen erreichbar machen? ???:L )
Und wenn ich mir einfach getAllChildren oder so geben lasse, dann hab ich da halt 15 Branchgroups als Return. Diese kann ich aber nicht unterscheiden :oops:
Irgendeine Idee wie ich die "markieren" kann um sie später besser aufzufinden?

(Ooooohhhh gerade eine Idee.... evtl am Ende der Group eine Variable nach aussen schreiben lassen, die die aktuelle Position enthält? Ach verdammt... Dann brauch ich da ja auch schon wieder ein Behavior, oder? Also insgesamt dann 15 Behaviors. Für jeden Planet eine... Oh mann... da teste ich mal ein bisschen rum....)

Wünsche euch eine schöne Nacht und ähnliche Erfolgserlebnisse :D
 
D

Der Dritte

Gast
Wie hast du das mit der Sonnenfinsternis gemacht?

Ich bekomme leider die Kamera nicht fest auf die Erde installiert, so dass die Kamera mitdreht :(
 

Der Dritte

Neues Mitglied
Der Dritte hat gesagt.:
Wie hast du das mit der Sonnenfinsternis gemacht?

Ich bekomme leider die Kamera nicht fest auf die Erde installiert, so dass die Kamera mitdreht :(

und ich würde gerne meinen Blick zu ändern, das ich als Schauender nicht mehr so ein großes Blickfeld habe ;)
 
G

Guest

Gast
BlindGuard hat gesagt.:
- Eigener Behavior, der bei jedem Frame ausgeführt wird:
Das probier ich gerade. Auf die Idee bin ich auch vor 'ner halben Stunde gekommen... Muss mich aber erst noch in den Behaviors zurechtfinden ;)
Absolute Position des Objekts, an dem die Kamera hängen soll, herausfinden (getLocalToVWorld oder so)
Das ist auch ein Problem, da wir ja ca 15 Objekte haben und ich war so clever und lass mir die durch eine Methode erstellen. Das funzt auch super, nur leider habe ich, sobald die erst mal Live sind, keinerlei Möglichkeit die zu unterscheiden :oops:

Alles blöder Kram.... :(

speicher die alphas in nem array oder so. wenn du die alphas hast kannst du alles berechnen.
 
G

Gast

Gast
Meine Kamera will auch nicht fliegen und Bumps... 3 Bücher, 5 Tuts und google voll, nur finde ich kaum etwas nützliches und was Bumpmaps angeht...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Kamera Stream Bereiche ausgrauen Spiele- und Multimedia-Programmierung 3
P Sich bewegende Kamera Spiele- und Multimedia-Programmierung 12
M Kamera "am Rande einer Kugel bewegen" Spiele- und Multimedia-Programmierung 4
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
S LWJGL Kamera Koordinaten invertiert. Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
B j3d Kamera Rotation durch Tastendruck Spiele- und Multimedia-Programmierung 12
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
B Video von einer IP kamera Spiele- und Multimedia-Programmierung 5
J [JOGL] Kamera zentrieren über Achse Spiele- und Multimedia-Programmierung 4
"Er" Kamera rotation in Java3D Spiele- und Multimedia-Programmierung 2
S mikroskop-kamera fuer jmf Spiele- und Multimedia-Programmierung 3
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
J Kamera ausrichten Spiele- und Multimedia-Programmierung 2
A Sichtvektor der "Kamera" Spiele- und Multimedia-Programmierung 2
A JAVA3D und die "Kamera" Spiele- und Multimedia-Programmierung 6
W "Kamera"-Position Spiele- und Multimedia-Programmierung 24
Tr3kk3r Kamera nur um x und y, nicht um z achse rotieren Spiele- und Multimedia-Programmierung 2
G Wie kann ich die Kamera / View Position ausgeben? Spiele- und Multimedia-Programmierung 3
I Zweite Kamera in einem SimpleUniverse Spiele- und Multimedia-Programmierung 6
H Java3D - Textur aufs innere einer Sphere mappen Spiele- und Multimedia-Programmierung 9
S sphere und die anzahl der triangles Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben