Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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?
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.
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?
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.
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 )
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.
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"
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
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.
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.....
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!
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)
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
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
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
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