2009-08-17 7 views
6

Ich habe eine Szene in Java 3D geschrieben, wo die Betrachtungsposition des Benutzers auf einige gesetzt wird, um den folgenden Code koordinieren mit:Wie zeichne ein 2D-Overlay auf einer Java 3D-Szene?

ViewingPlatform vp = simpleUniverse.getViewingPlatform(); 
TransformGroup steerTG = vp.getViewPlatformTransform(); 

Transform3D t3d = new Transform3D(); 
steerTG.getTransform(t3d); 

t3d.lookAt(
     new Point3d(-5, 10, 25), new Point3d(0, 0, 0), new Vector3d(0, 1, 0)); 
t3d.invert(); 

steerTG.setTransform(t3d); 

Jetzt muss ich auf der Szene ein Overlay setzen, die immer sichtbar ist, wie zum Beispiel ein Text. Ich habe die folgende versucht, aber ohne Erfolg:

PlatformGeometry pg = new PlatformGeometry(); 
Text2D text = new Text2D("Text to display", Cell.BLACK, "Verdana", 18, 1); 
pg.addChild(text); 
simpleUniverse.getViewingPlatform().setPlatformGeometry(pg); 

Wenn ich den obigen Code ausführen, sehe ich keinen Text überhaupt. Kann mir bitte jemand helfen?

+0

Ich hoffe, ich kann diese Frage bald verstehen. Java 3D hier komme ich. –

Antwort

4

Das Problem ist, dass Sie den Text direkt auf der Kamera in der nahen Clipping-Ebene anzeigen. Sie benötigen etwas, um -1 entlang der Z-Achse zu übersetzen.

PlatformGeometry pg = new PlatformGeometry(); 

    TransformGroup objScale = new TransformGroup(); 
    Transform3D t3d = new Transform3D(); 
    t3d.setTranslation(new Vector3f(0f, 0f, -1f)); 
    objScale.setTransform(t3d); 

    Text2D text = new Text2D("Text to display", Cell.BLACK, "Verdana", 18, 1); 

    objScale.addChild(text); 
    pg.addChild(objScale); 

    simpleUniverse.getViewingPlatform().setPlatformGeometry(pg); 

Hoffe, dass hilft.

+0

Absolut fantastisch! Vielen Dank! – Cuga