Java3D應用實例-創建空間幾何模型


Java3D,算是比較古老的技術,Java8OracleJavaFX支持了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]

 

在線交談

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM