開發環境:html
win8 64 +jdk8java
教程地址:http://www.java3d.org/tutorial.htmlnode
步驟:canvas
1. jdk安裝部署——略windows
2. 安裝java3Dide
https://java3d.java.net/binary-builds.htmlui
筆記本是64位,因此下載j3d-1_5_2-windows-amd64。注意,j3d-1_5_2-windows-i586.zip和j3d-1_5_2-windows-amd64不是指對應的cpu,有效的是最後2位數字。被這個坑了一陣子……this
解壓後發現兩個文件夾,bin和libspa
老規矩,lib包裏的jar導入到項目classpath.net
bin的處理新鮮一點,我把它copy到src下,而後,
好了,環境部署到此結束。接下來run你本身的代碼就好。比方說:
import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.ColorCube; import javax.media.j3d.*; import javax.vecmath.*; import java.awt.GraphicsConfiguration; /** * Simple Java 3D example program to display a spinning cube. */ public class HelloUniverse extends javax.swing.JFrame { private SimpleUniverse univ = null; private BranchGroup scene = null; public BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); // Create the TransformGroup node and initialize it to the // identity. Enable the TRANSFORM_WRITE capability so that // our behavior code can modify it at run time. Add it to // the root of the subgraph. TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objTrans); // Create a simple Shape3D node; add it to the scene graph. objTrans.addChild(new ColorCube(0.4)); // Create a new Behavior object that will perform the // desired operation on the specified transform and add // it into the scene graph. Transform3D yAxis = new Transform3D(); Alpha rotationAlpha = new Alpha(-1, 4000); RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI*2.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); rotator.setSchedulingBounds(bounds); objRoot.addChild(rotator); // Have Java 3D perform optimizations on this scene graph. objRoot.compile(); return objRoot; } private Canvas3D createUniverse() { // Get the preferred graphics configuration for the default screen GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); // Create a Canvas3D using the preferred configuration Canvas3D c = new Canvas3D(config); // Create simple universe with view branch univ = new SimpleUniverse(c); // This will move the ViewPlatform back a bit so the // objects in the scene can be viewed. univ.getViewingPlatform().setNominalViewingTransform(); // Ensure at least 5 msec per frame (i.e., < 200Hz) univ.getViewer().getView().setMinimumFrameCycleTime(5); return c; } /** * Creates new form HelloUniverse */ public HelloUniverse() { // Initialize the GUI components initComponents(); // Create Canvas3D and SimpleUniverse; add canvas to drawing panel Canvas3D c = createUniverse(); drawingPanel.add(c, java.awt.BorderLayout.CENTER); // Create the content branch and add it to the universe scene = createSceneGraph(); univ.addBranchGraph(scene); } // ---------------------------------------------------------------- /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { drawingPanel = new javax.swing.JPanel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("HelloUniverse"); drawingPanel.setLayout(new java.awt.BorderLayout()); drawingPanel.setPreferredSize(new java.awt.Dimension(250, 250)); getContentPane().add(drawingPanel, java.awt.BorderLayout.CENTER); pack(); }// </editor-fold>//GEN-END:initComponents /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new HelloUniverse().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel drawingPanel; // End of variables declaration//GEN-END:variables }
java3d的下載命名和本地庫的設置着實坑了我一陣。
還有兩個問題,一是不開放源碼,看代碼註釋很不方便;二是java3d已經暫停維護了?!真的太糟糕了。
並且,堂堂java程序,除了JVM,竟然還要本地庫的支持??
嘖嘖,吃棗藥丸啊——