# Dimensionen/Maßstab des J3D universe ändern



## Shaderman (11. Nov 2005)

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 (11. Nov 2005)

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 (12. Nov 2005)

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


----------



## Spacerat (12. Jan 2006)

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:


```
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 (12. Jan 2006)

Liegt das vielleicht an der frontClipDistance?

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


----------



## DeepBlue (13. Jan 2006)

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 (13. Jan 2006)

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 (16. Jan 2006)

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 (16. Jan 2006)

DeepBlue hat gesagt.:
			
		

> MPW hat gesagt.:
> 
> 
> 
> ...



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.


----------

