// (c) 2016 Alexei A. Morozov
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.universe.Viewer;
import javax.vecmath.*;
import java.awt.*;
import javax.media.j3d.*;
import java.applet.*;
public class t101 extends Applet {
public static void main(String[] args) {
new MainFrame(new t101(),640,480);
}
public void init() {
GraphicsConfigTemplate3D gct3D= new GraphicsConfigTemplate3D();
gct3D.setSceneAntialiasing(GraphicsConfigTemplate3D.REQUIRED);
GraphicsConfiguration gc= java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getBestConfiguration(gct3D);
Canvas3D cv= new Canvas3D(gc);
setLayout(new BorderLayout());
add(cv,BorderLayout.CENTER);
BranchGroup bg= createSceneGraph();
bg.compile();
SimpleUniverse su= new SimpleUniverse(cv);
su.getViewingPlatform().setNominalViewingTransform();
su.addBranchGraph(bg);
Viewer viewer= su.getViewer();
View view2= viewer.getView();
view2.setSceneAntialiasingEnable(true);
System.out.printf("cv.getSceneAntialiasingAvailable() = %s\n",cv.getSceneAntialiasingAvailable());
System.out.printf("((Boolean)cv.queryProperties().get(\"sceneAntialiasingAvailable\")).booleanValue() = %s\n",((Boolean)cv.queryProperties().get("sceneAntialiasingAvailable")).booleanValue());
System.out.printf("cv.queryProperties().get(\"sceneAntialiasingNumPasses\") = %s\n",cv.queryProperties().get("sceneAntialiasingNumPasses"));
java.util.Map map= cv.queryProperties();
System.out.printf("map: %s\n",map);
// sceneAntialiasingNumPasses
//
// An Integer indicating the number of passes scene antialiasing
// requires to render a single frame for this Canvas3D.
// If this value is zero, scene antialiasing is not supported.
// If this value is one, multisampling antialiasing is used.
// Otherwise, the number indicates the number of rendering passes
// needed.
}
private BranchGroup createSceneGraph() {
BranchGroup root= new BranchGroup();
TransformGroup spin= new TransformGroup();
spin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
root.addChild(spin);
Appearance ap= new Appearance();
// ap.setMaterial(new Material());
Material mat= new Material();
mat.setLightingEnable(false);
ap.setMaterial(mat);
FontExtrusion fontExtrusion= new FontExtrusion();
double tessellationTolerance= 1e-2;
Text3D text3d= new Text3D(
new Font3D(
new Font("Helvetica",Font.PLAIN,48),
tessellationTolerance,
fontExtrusion),
"01234567890 TEXT 3D");
Shape3D text2= new Shape3D(text3d);
text2.setAppearance(ap);
BoundingBox boundingBox= new BoundingBox();
text3d.getBoundingBox(boundingBox);
Point3d p1= new Point3d();
boundingBox.getUpper(p1);
TransformGroup textTrans= new TransformGroup();
Transform3D t3d= new Transform3D();
t3d.setTranslation(new Vector3d(-(p1.x/2),-(p1.y/2),-(p1.z/2)));
textTrans.setTransform(t3d);
textTrans.addChild(text2);
Transform3D tr= new Transform3D();
tr.setScale(0.1); // tr.setScale(0.002);
TransformGroup tg= new TransformGroup(tr);
spin.addChild(tg);
tg.addChild(textTrans);
Alpha alpha= new Alpha(-1,1000000000);
RotationInterpolator rotator= new RotationInterpolator(alpha,spin);
BoundingSphere bounds= new BoundingSphere();
rotator.setSchedulingBounds(bounds);
spin.addChild(rotator);
Background background= new Background(0.0f,0.0f,0.0f);
background.setApplicationBounds(bounds);
root.addChild(background);
AmbientLight light= new AmbientLight(true,new Color3f(Color.white));
light.setInfluencingBounds(bounds);
root.addChild(light);
PointLight ptlight= new PointLight(new Color3f(Color.white),new Point3f(3f,3f,3f),new Point3f(1f,0f,0f));
ptlight.setInfluencingBounds(bounds);
root.addChild(ptlight);
PointLight ptlight2= new PointLight(new Color3f(Color.white),
new Point3f(-2f,2f,2f),new Point3f(1f,0f,0f));
ptlight2.setInfluencingBounds(bounds);
root.addChild(ptlight2);
return root;
}
}