📄 transformorder.java
字号:
package transformorder;import java.applet.Applet;import java.awt.BorderLayout;import java.awt.event.*;import java.awt.*;import java.awt.GraphicsConfiguration;import com.sun.j3d.utils.applet.MainFrame;import com.sun.j3d.utils.geometry.*;import com.sun.j3d.utils.universe.*;import javax.media.j3d.*;import javax.vecmath.*;import com.sun.j3d.utils.behaviors.vp.*;/** * <p>Title: 操纵三维形体行为演示</p> * <p>Description: 通过鼠标操作显示三维形体</p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: 中国农业大学计算机系</p> * @author 彭波 * @version 1.0 */public class TransformOrder extends Applet { boolean isStandalone = false; public static final int X =1; public static final int Y =2; public static final int Z =3; public static final int ROTATE_TOP =4; public static final int TRANSLATE_TOP =5; public static final int NO_TRANSFORM =6; private SimpleUniverse universe ; private BranchGroup scene; private Canvas3D canvas; private BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0); private Appearance red = new Appearance(); private Appearance yellow = new Appearance(); private Appearance purple = new Appearance(); Transform3D rotate = new Transform3D(); Transform3D translate = new Transform3D(); public void setupView() { OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM); orbit.setSchedulingBounds(bounds); ViewingPlatform viewingPlatform = universe.getViewingPlatform(); viewingPlatform.setNominalViewingTransform(); viewingPlatform.setViewPlatformBehavior(orbit); } Group rotateOnTop(){ Group root=new Group(); TransformGroup objRotate = new TransformGroup(rotate); TransformGroup objTranslate = new TransformGroup(translate); Cone redCone= new Cone(.3f, 0.7f, Primitive.GENERATE_NORMALS, red); root.addChild(objRotate); objRotate.addChild(objTranslate); objTranslate.addChild(redCone); return root; } Group translateOnTop(){ Group root=new Group(); TransformGroup objRotate = new TransformGroup(rotate); TransformGroup objTranslate = new TransformGroup(translate); Cone yellowCone= new Cone(.3f, 0.7f, Primitive.GENERATE_NORMALS, yellow); root.addChild(objTranslate); objTranslate.addChild(objRotate); objRotate.addChild(yellowCone); //tack on yellow cone return root; } Group noTransform(){ Cone purpleCone= new Cone(.3f, 0.7f, Primitive.GENERATE_NORMALS, purple); return purpleCone; } public TransformGroup createAxis(int type) { Appearance appearance = new Appearance(); Material lightingProps = new Material(); Transform3D t = new Transform3D(); switch (type) { case Z: t.rotX(Math.toRadians(90.0)); lightingProps.setAmbientColor(1.0f,0.0f,0.0f); break; case Y: lightingProps.setAmbientColor(0.0f,1.0f,0.0f); break; case X: t.rotZ(Math.toRadians(90.0)); lightingProps.setAmbientColor(0.0f,0.0f,1.0f); break; default: break; } appearance.setMaterial(lightingProps); TransformGroup objTrans = new TransformGroup(t); objTrans.addChild( new Cylinder(.03f,2.5f,Primitive.GENERATE_NORMALS,appearance)); return objTrans; } public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); rotate.rotX(Math.toRadians(45.0)); translate.setTranslation(new Vector3f(0.0f,2.0f,1.0f)); Material redProps = new Material(); redProps.setAmbientColor(1.0f,0.0f,0.0f); red.setMaterial(redProps); Material yellowProps = new Material(); yellowProps.setAmbientColor(1.0f,1.0f,0.0f); yellow.setMaterial(yellowProps); Material purpleProps = new Material(); purpleProps.setAmbientColor(0.8f,0.0f,0.8f); purple.setMaterial(purpleProps); objRoot.addChild(createAxis(X)); objRoot.addChild(createAxis(Y)); objRoot.addChild(createAxis(Z)); objRoot.addChild(noTransform()); objRoot.addChild(rotateOnTop()); objRoot.addChild(translateOnTop()); Color3f lightColor = new Color3f(.3f,.3f,.3f); AmbientLight ambientLight= new AmbientLight(lightColor); ambientLight.setInfluencingBounds(bounds); objRoot.addChild(ambientLight); DirectionalLight directionalLight = new DirectionalLight(); directionalLight.setColor(lightColor); directionalLight.setInfluencingBounds(bounds); objRoot.addChild(directionalLight); return objRoot; } public TransformOrder() { } public void init() { BranchGroup scene = createSceneGraph(); setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); canvas = new Canvas3D(config); add("Center", canvas); universe = new SimpleUniverse(canvas); setupView(); universe.addBranchGraph(scene); } public void destroy() { universe.removeAllLocales(); } //Main method public static void main(String[] args) { TransformOrder applet = new TransformOrder(); applet.isStandalone = true; Frame frame; frame = new Frame() { protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public synchronized void setTitle(String title) { super.setTitle(title); enableEvents(AWTEvent.WINDOW_EVENT_MASK); } }; frame.setTitle("操纵三维形体行为演示"); frame.add(applet, BorderLayout.CENTER); applet.init(); applet.start(); frame.setSize(400,400); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2); frame.setVisible(true); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -