Java3D,算是比較古老的技術,Java8中Oracle對JavaFX支持了Java3D. 相關資料參照Oracle官網 <JDK8目前還沒有正式發布 Early Access版本下載地址 http://jdk8.java.net/>
環境搭建Java3D開發環境,JDK下載見Oracle官網.安裝后在安裝目錄下的lib文件中找到Java3D驅動包,添加的自己的項目中
Java3D實現簡單幾何空間圖形說明:
實例應用:創建3D直線
package com.java3d.dennist.study; import javax.media.j3d.Appearance; import javax.media.j3d.LineArray; import javax.media.j3d.LineAttributes; import javax.media.j3d.Shape3D; /** * * * @version : 1.1 * * @author : 蘇若年 <a href="mailto:DennisIT@163.com">發送郵件</a> * * @since : 1.0 創建時間: 2013-5-6 下午02:57:47 * * TODO : * */ public class LineShape extends Shape3D{ // 直線的定點坐標 private float vert[ ]={ 0.5f,0.5f,0.0f, -0.5f,0.5f,0.0f, 0.3f,0.0f,0.0f, -0.3f,0.0f,0.0f, -0.5f,-0.5f,0.0f, 0.5f,-0.5f,0.0f}; // 各定點的顏色 private float color[ ]={ 0.0f,0.5f,1.0f, 0.0f,0.5f,1.0f, 0.0f,0.8f,2.0f, 1.0f,0.0f,0.3f, 0.0f,1.0f,0.3f, 0.3f,0.8f,0.0f}; public LineShape( ) { // 創建直線數組對象 LineArray line=new LineArray(6,LineArray.COORDINATES|LineArray.COLOR_3); // 設置直線對象的坐標數組 line.setCoordinates(0,vert); // 設置直線對象的顏色數組 line.setColors(0,color); // 創建直線屬性對象 LineAttributes linea=new LineAttributes( ); // 設置線寬 linea.setLineWidth(10.0f); // 設置直線的渲染效果 linea.setLineAntialiasingEnable(true); Appearance app=new Appearance( ); app.setLineAttributes(linea); this.setGeometry(line); this.setAppearance(app); } }
將3d直線放置到場景中
package com.java3d.dennist.study; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.DirectionalLight; import javax.media.j3d.Shape3D; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; import com.sun.j3d.utils.universe.SimpleUniverse; /** * * * @version : 1.1 * * @author : 蘇若年 <a href="mailto:DennisIT@163.com">發送郵件</a> * * @since : 1.0 創建時間: 2013-5-6 下午02:50:08 * * TODO : * */ public class Line3DShape { public Line3DShape(){ //構建空間 和物體 // 創建一個虛擬空間 SimpleUniverse universe = new SimpleUniverse(); // 創建一個用來包含對象的數據結構 BranchGroup group = new BranchGroup(); // 創建直線形狀對象把它加入到group中 Shape3D shape=new LineShape(); group.addChild(shape); //燈光構造 Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f); // 設置光線的顏色 BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); // 設置光線的作用范圍 Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); // 設置光線的方向 DirectionalLight light1= new DirectionalLight(light1Color, light1Direction); // 指定顏色和方向,產生單向光源 light1.setInfluencingBounds(bounds); // 把光線的作用范圍加入光源中 group.addChild(light1); // 將光源加入group組 // 安放觀察點 universe.getViewingPlatform().setNominalViewingTransform(); // 把group加入到虛擬空間中 universe.addBranchGraph(group); } public static void main(String[] args) { new Line3DShape(); } }
運行效果:
其他形狀
錐體: Cone cone=new Cone(.5f,1.0f,1,app) //app即外觀參數
球體: Sphere sphere=new Sphere(.5f,app); //app即外觀參數
圓柱體: Cylinder cylinder=new Cylinder(.5f,1.0f);
實例應用:Java3D實現空間椎體
package com.java3d.dennist.study; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.DirectionalLight; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; import com.sun.j3d.utils.geometry.Cone; import com.sun.j3d.utils.universe.SimpleUniverse; /** * * * @version : 1.1 * * @author : 蘇若年 <a href="mailto:DennisIT@163.com">發送郵件</a> * * @since : 1.0 創建時間: 2013-5-6 下午02:50:08 * * TODO : Java3D 各種三維形狀展示 * */ public class Java3DShape { public Java3DShape(){ //構建空間 和物體 // 創建一個虛擬空間 SimpleUniverse universe = new SimpleUniverse(); // 創建一個用來包含對象的數據結構 BranchGroup group = new BranchGroup(); // 創建一個椎體並把它加入到group中 Cone cone=new Cone(.5f,1.0f,1,null) ; //錐體 group.addChild(cone); //燈光構造 Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f); // 設置光線的顏色 BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); // 設置光線的作用范圍 Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); // 設置光線的方向 DirectionalLight light1= new DirectionalLight(light1Color, light1Direction); // 指定顏色和方向,產生單向光源 light1.setInfluencingBounds(bounds); // 把光線的作用范圍加入光源中 group.addChild(light1); // 將光源加入group組 // 安放觀察點 universe.getViewingPlatform().setNominalViewingTransform(); // 把group加入到虛擬空間中 universe.addBranchGraph(group); } public static void main(String[] args) { new Java3DShape(); } }
效果圖:
實例應用:Java3D實現空間球體
package com.java3d.dennist.study; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.DirectionalLight; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; import com.sun.j3d.utils.geometry.Sphere; import com.sun.j3d.utils.universe.SimpleUniverse; /** * * * @version : 1.1 * * @author : 蘇若年 <a href="mailto:DennisIT@163.com">發送郵件</a> * * @since : 1.0 創建時間: 2013-5-6 下午02:50:08 * * TODO : Java3D 各種三維形狀展示 * */ public class Java3DShape { public Java3DShape(){ //構建空間 和物體 // 創建一個虛擬空間 SimpleUniverse universe = new SimpleUniverse(); // 創建一個用來包含對象的數據結構 BranchGroup group = new BranchGroup(); // 創建一個球並把它加入到group中 Sphere sphere = new Sphere(0.5f);// 小球的半徑為0.5米 group.addChild(sphere); //燈光構造 Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f); // 設置光線的顏色 BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); // 設置光線的作用范圍 Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); // 設置光線的方向 DirectionalLight light1= new DirectionalLight(light1Color, light1Direction); // 指定顏色和方向,產生單向光源 light1.setInfluencingBounds(bounds); // 把光線的作用范圍加入光源中 group.addChild(light1); // 將光源加入group組 // 安放觀察點 universe.getViewingPlatform().setNominalViewingTransform(); // 把group加入到虛擬空間中 universe.addBranchGraph(group); } public static void main(String[] args) { new Java3DShape(); } }
效果圖:
實例應用:Java3D實現空間圓柱體
package com.java3d.dennist.study; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.DirectionalLight; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3f; import com.sun.j3d.utils.geometry.Cylinder; import com.sun.j3d.utils.universe.SimpleUniverse; /** * * * @version : 1.1 * * @author : 蘇若年 <a href="mailto:DennisIT@163.com">發送郵件</a> * * @since : 1.0 創建時間: 2013-5-6 下午02:50:08 * * TODO : Java3D 各種三維形狀展示 * */ public class Java3DShape { public Java3DShape(){ //構建空間 和物體 // 創建一個虛擬空間 SimpleUniverse universe = new SimpleUniverse(); // 創建一個用來包含對象的數據結構 BranchGroup group = new BranchGroup(); // 創建一個圓柱形狀並把它加入到group中 Cylinder cylinder=new Cylinder(.5f,1.0f); //圓柱型 group.addChild(cylinder); //燈光構造 Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f); // 設置光線的顏色 BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); // 設置光線的作用范圍 Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); // 設置光線的方向 DirectionalLight light1= new DirectionalLight(light1Color, light1Direction); // 指定顏色和方向,產生單向光源 light1.setInfluencingBounds(bounds); // 把光線的作用范圍加入光源中 group.addChild(light1); // 將光源加入group組 // 安放觀察點 universe.getViewingPlatform().setNominalViewingTransform(); // 把group加入到虛擬空間中 universe.addBranchGraph(group); } public static void main(String[] args) { new Java3DShape(); } }
效果圖:
轉載請注明出處:[http://www.cnblogs.com/dennisit/archive/2013/05/06/3063042.html]