Dear Xuedong, Greg, Isaac and all:
Thank you for your
valuable suggestions. I tried all your suggestions and other possibilities
I can imagine, the text still did not show. I have attached the revised
PureImmediate.java here for your reference. I need to point out or ask
some questions here:
1. Xue Dong
suggested trying to change scale and take out spaces between words, I did it but
no improvement found.
2. Greg suggested
that In between the section where I call canvas.draw(cube/cube2) put the line
canvas.swap(). I did it but still no improvement.
3. Isaac suggested to try AmbientLight and Directional Light, I did it and still not lick. Please help me. Thank you a
lot!
G.B. Liu
|
package pureimmediate; import java.applet.Applet; import java.awt.BorderLayout; import java.awt.GraphicsConfiguration; import java.awt.event.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.universe.*; import javax.media.j3d.*; import javax.vecmath.*; import java.awt.GraphicsEnvironment; import java.awt.Font;
public class PureImmediate extends Applet implements Runnable { private Canvas3D canvas; private GraphicsContext3D gc = null; private Geometry cube = null, cube1=null; private Transform3D cmt = new Transform3D(); Material sphereMaterial = new Material(); Appearance sphereAppearance = new Appearance(); private Alpha rotAlpha = new Alpha(-1, 6000); private SimpleUniverse u = null; public void render() { if (gc == null) { gc = canvas.getGraphicsContext3D(); gc.setBufferOverride(true); gc.setAppearance(new Appearance()); cube = new ColorCube(0.3).getGeometry(); cube1=new ColorCube(0.2).getGeometry(); } double angle = rotAlpha.value() * 2.0*Math.PI; cmt.rotY(angle); gc.setStereoMode(GraphicsContext3D.STEREO_LEFT); gc.clear(); gc.setModelTransform(cmt); gc.draw(cube); canvas.swap(); gc.setStereoMode(GraphicsContext3D.STEREO_RIGHT); gc.clear(); cmt.rotX(angle); cmt.rotZ(angle); gc.setModelTransform(cmt); gc.draw(cube1); canvas.swap(); } public void run() { while (true) { render(); Thread.yield(); } } public PureImmediate() { } public void init() { setLayout(new BorderLayout()); GraphicsConfigTemplate3D g3d = new GraphicsConfigTemplate3D(); g3d.setStereo(GraphicsConfigTemplate3D.REQUIRED); GraphicsConfiguration config = GraphicsEnvironment. getLocalGraphicsEnvironment(). getDefaultScreenDevice(). getBestConfiguration(g3d); canvas = new Canvas3D(config); canvas.setStereoEnable(true); canvas.stopRenderer(); add("Center", canvas); Font3D f3d = new Font3D(new Font("TestFont", Font.PLAIN, 3), new FontExtrusion()); Text3D txt = new Text3D(f3d, "ClickingMe", new Point3f(-1.0f, 0.0f, 1.0f), Text3D.ALIGN_CENTER, Text3D.PATH_LEFT); Appearance app=new Appearance(); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); Material mat=new Material(); AmbientLight ambLight=new AmbientLight(new Color3f(1.0f, 0.0f, 0.0f)); ambLight.setInfluencingBounds(bounds); DirectionalLight difLight=new DirectionalLight(new Color3f(0.5f, 0.0f, 0.0f), new Vector3f(-1.0f, -1.0f, -1.0f)); difLight.setInfluencingBounds(bounds); app.setMaterial(mat); Shape3D shape=new Shape3D(txt, app); shape.setBounds(bounds); shape.setCapability(Shape3D.ALLOW_APPEARANCE_READ); app.setCapability(Appearance.ALLOW_MATERIAL_READ); mat.setCapability(Material.ALLOW_COMPONENT_READ); mat.setCapability(Material.ALLOW_COMPONENT_WRITE); mat.setAmbientColor(0.1f, 0.0f, 0.5f); mat.setDiffuseColor(0.0f, 1.0f, 0.0f); u = new SimpleUniverse(canvas); BranchGroup group=new BranchGroup(); group.addChild(shape); group.addChild(ambLight); group.addChild(difLight); u.addBranchGraph(group); u.getViewingPlatform().setNominalViewingTransform(); new Thread(this).start(); } public void destroy() { u.cleanup(); } public static void main(String[] args) { new MainFrame(new PureImmediate(), 800, 550); } }