Dimensionen/Maßstab des J3D universe ändern

Status
Nicht offen für weitere Antworten.

Shaderman

Neues Mitglied
Hallo!

Ich (Java Anfänger) versuche mich seit einigen Tagen in J3D einzuarbeiten (was dank zahlreicher Tutorials und diesem Forum auch ganz gut klappt) ;)

Jetzt stehe ich vor folgendem Problem (ich hoffe ich kann es verständlich beschreiben): Ich würde gerne insgesamt mit einer größeren Maßeinheit arbeiten. Momentan ist es so, daß ich mit kleinen float Werten große Objekte erhalte (ein auf 0.5 skalierter ColorCube füllt fast das ganze 3D- Fenster aus). Ich würde jetzt gerne die Dimensionen des universe so verändern, daß ich mit größeren floats arbeiten kann so daß mein 3D- Fenster z.B. erst mit einem Kreis der einen Durchmesser von 300f hat, gefüllt ist.

Für ein Stichwort nach dem ich suchen könnte wäre ich sehr dankbar.

Shaderman
 

Illuvatar

Top Contributor
Na ja du könntest ja mal View#setScreenScale probieren, wenn dir das reicht. Canvas3D hat auch die Methode getPhysicalWidth/Height, aber dazu keine setter, wobei das für dich wahrscheinlich nützlicher wäre.
 

Shaderman

Neues Mitglied
Danke für Deine Antwort! View.setScreenScale ist nicht das was ich mir vorstelle. Nach langem suchen habe ich jetzt hoffentlich etwas passendes gefunden:

Transform3D.setScale(double scale).
Sets the scale component of the current transform; any existing scale is first factored out of the existing transform before the new scale is applied.

Mal sehen ob ich damit weiter komme :)

Shaderman
 
S

Spacerat

Gast
Schön...

... das ich nicht der einzige bin der dieses Prob hat. Mit "((Transform3D) obj).setScale()" ändert man schon mal die Grösse einer BranchGroup mit sammt ihrer Unterobjekte. Das Universum wird dadurch aber nicht grösser. Diese Geschichte habe ich bereits auf die ViewingPlatformTransform angewendet:

Code:
    GraphicsConfiguration gc = SimpleUniverse.getPreferredConfiguration();
    Canvas3D canvas3d = new Canvas3D(gc);
    TransformGroup tg = new TransformGroup();
    Transform3D t3d = new Transform3D();
    ViewingPlatform vp = new ViewingPlatform();
    t3d.setScale(100000.0);
    tg.setTransform(t3d);
    vp.addChild(tg);
    Viewer v = new Viewer(canvas3d);
    SimpleUniverse su = new SimpleUniverse(vp, v);
    ...

das hatte zur Folge das sich das Universum zwar vergrösserte, entferntere Objekte jedoch in den Bilschirm hinein versetzt plötzlich verschwinden.

Dieses Verschwinden möchte ich nun noch verhindert haben? Kann jemand helfen?

cu Spacerat
 

Illuvatar

Top Contributor
Liegt das vielleicht an der frontClipDistance?

http://www-eph.int-evry.fr/~bideau/java/api/apiJava3D/javax/media/j3d/View.html#setFrontClipDistance(double)
 

DeepBlue

Aktives Mitglied
Jo, mit setScale() werden nur die Objekte verkleinert, nicht das Universum vergrößert. Ich verstehe gerade nicht, warum View.setScreenScale() nicht das ist, was du suchst. Aber über setScale() sollte es ja auch funktionieren.

Das Objekte, die vorne sind Verschwinden liegt tatsächlich an dem Front Clip. Dieser müsste durch die Methoden setFrontClipDistance(double distance) und setFrontClipPolicy(int policy) der Klasse View eingestellt werden können. Schau dazu am besten mal in die API.

mfg DeeP
 

MPW

Top Contributor
Ihr denkt glaube ich ein bisschen in die falsche Richtung, die Masseinheit spielt keine Rolle, da sie willkuerlich festgelegt ist. Benutzt doch einfach kleinere floatwerte? Das ist zwar nicht so schoen zum rechnen, aber so ist das eigentlich eher gedacht....
 

DeepBlue

Aktives Mitglied
MPW hat gesagt.:
Ihr denkt glaube ich ein bisschen in die falsche Richtung, die Masseinheit spielt keine Rolle, da sie willkuerlich festgelegt ist. Benutzt doch einfach kleinere floatwerte? Das ist zwar nicht so schoen zum rechnen, aber so ist das eigentlich eher gedacht....

Naja, die Einheit spielt dann eine Rolle, wenn du etwas mit realen Maßen, virtuell darstellen willst. Ich schreibe z.B. gerade an einer Software in Java3D zu Einrichtung einer Bühne. Da ist es schon ganz nice, wenn man reale Maße wie 1m z.B. auf 1.0f umrechnen kann. Klar ist es möglich das ganze mit Faktore umzurechnen, aber wozu, wenn es auch anders/einfacher geht ?!
 

MPW

Top Contributor
DeepBlue hat gesagt.:
MPW hat gesagt.:
Ihr denkt glaube ich ein bisschen in die falsche Richtung, die Masseinheit spielt keine Rolle, da sie willkuerlich festgelegt ist. Benutzt doch einfach kleinere floatwerte? Das ist zwar nicht so schoen zum rechnen, aber so ist das eigentlich eher gedacht....

Naja, die Einheit spielt dann eine Rolle, wenn du etwas mit realen Maßen, virtuell darstellen willst. Ich schreibe z.B. gerade an einer Software in Java3D zu Einrichtung einer Bühne. Da ist es schon ganz nice, wenn man reale Maße wie 1m z.B. auf 1.0f umrechnen kann. Klar ist es möglich das ganze mit Faktore umzurechnen, aber wozu, wenn es auch anders/einfacher geht ?!

Naja, und wenn einem das nicht passt macht man halt 1m = 0.5f, wo ist das Problem? Du kannst ja eine static-Variable definieren, die diesen Umrechungsfaktor vorgibt.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben