Java3D,算是比較古老的技術,Java8中Oracle對JavaFX支持了Java3D. 相關資料參照Oracle官網 <JDK8目前還沒有正式發布 Early Access版本下載地址 http://jdk8.java.net>
環境搭建Java3D開發環境,JDK下載見Oracle官網.安裝后在安裝目錄下的lib文件中找到Java3D驅動包,添加的自己的項目中
Java3D實現簡單幾何空間圖形說明:
實例應用:創建3D直線 import javax.media.j3d.Appearance; /** // 直線的定點坐標 } import javax.media.j3d.BoundingSphere; import com.sun.j3d.utils.universe.SimpleUniverse; /** public Line3DShape(){
package com.java3d.dennist.study;
import javax.media.j3d.LineArray;
import javax.media.j3d.LineAttributes;
import javax.media.j3d.Shape3D;
*
*
* @version : 1.1
*
* @author : 蘇若年 <a href="mailto:[email protected]">發送郵件</a>
*
* @since : 1.0 創建時間: 2013-5-6 下午02:57:47
*
* TODO :
*
*/
public class LineShape extends Shape3D{
private float vert[ ]={
.5f,0.5f,0.0f, -0.5f,0.5f,0.0f,
.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[ ]={
.0f,0.5f,1.0f, 0.0f,0.5f,1.0f,
.0f,0.8f,2.0f, 1.0f,0.0f,0.3f,
.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.BranchGroup;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Shape3D;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
*
*
* @version : 1.1
*
* @author : 蘇若年 <a href="mailto:[email protected]">發送郵件</a>
*
* @since : 1.0 創建時間: 2013-5-6 下午02:50:08
*
* TODO :
*
*/
public class 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實現空間椎體
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:[email protected]">發送郵件</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實現空間球體
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:[email protected]">發送郵件</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實現空間圓柱體
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:[email protected]">發送郵件</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();
}
}
|
新聞熱點
疑難解答
圖片精選