Java3D實(shí)例之創(chuàng)建空間幾何模型的實(shí)現(xiàn)方法
Java3D,算是比較古老的技術(shù),Java8中Oracle對(duì)JavaFX支持了Java3D. 相關(guān)資料參照Oracle官網(wǎng) <JDK8目前還沒有正式發(fā)布 Early Access版本下載地址 http://jdk8.java.net>
環(huán)境搭建Java3D開發(fā)環(huán)境,JDK下載見Oracle官網(wǎng).安裝后在安裝目錄下的lib文件中找到Java3D驅(qū)動(dòng)包,添加的自己的項(xiàng)目中
Java3D實(shí)現(xiàn)簡(jiǎn)單幾何空間圖形說明:

實(shí)例應(yīng)用:創(chuàng)建3D直線 import javax.media.j3d.Appearance; /** // 直線的定點(diǎn)坐標(biāo) } 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:DennisIT@163.com">發(fā)送郵件</a>
*
* @since : 1.0 創(chuàng)建時(shí)間: 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};
// 各定點(diǎn)的顏色
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( ) {
// 創(chuàng)建直線數(shù)組對(duì)象
LineArray line=new LineArray(6,LineArray.COORDINATES|LineArray.COLOR_3);
// 設(shè)置直線對(duì)象的坐標(biāo)數(shù)組
line.setCoordinates(0,vert);
// 設(shè)置直線對(duì)象的顏色數(shù)組
line.setColors(0,color);
// 創(chuàng)建直線屬性對(duì)象
LineAttributes linea=new LineAttributes( );
// 設(shè)置線寬
linea.setLineWidth(10.0f);
// 設(shè)置直線的渲染效果
linea.setLineAntialiasingEnable(true);
Appearance app=new Appearance( );
app.setLineAttributes(linea);
this.setGeometry(line);
this.setAppearance(app);
}
將3d直線放置到場(chǎng)景中
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:DennisIT@163.com">發(fā)送郵件</a>
*
* @since : 1.0 創(chuàng)建時(shí)間: 2013-5-6 下午02:50:08
*
* TODO :
*
*/
public class Line3DShape {
//構(gòu)建空間 和物體
// 創(chuàng)建一個(gè)虛擬空間
SimpleUniverse universe = new SimpleUniverse();
// 創(chuàng)建一個(gè)用來包含對(duì)象的數(shù)據(jù)結(jié)構(gòu)
BranchGroup group = new BranchGroup();
// 創(chuàng)建直線形狀對(duì)象把它加入到group中
Shape3D shape=new LineShape();
group.addChild(shape);
//燈光構(gòu)造
Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f);
// 設(shè)置光線的顏色
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
// 設(shè)置光線的作用范圍
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
// 設(shè)置光線的方向
DirectionalLight light1= new DirectionalLight(light1Color, light1Direction);
// 指定顏色和方向,產(chǎn)生單向光源
light1.setInfluencingBounds(bounds);
// 把光線的作用范圍加入光源中
group.addChild(light1);
// 將光源加入group組
// 安放觀察點(diǎn)
universe.getViewingPlatform().setNominalViewingTransform();
// 把group加入到虛擬空間中
universe.addBranchGraph(group);
}
public static void main(String[] args) {
new Line3DShape();
}
}
運(yùn)行效果:
其他形狀
錐體: Cone cone=new Cone(.5f,1.0f,1,app) //app即外觀參數(shù)
球體: Sphere sphere=new Sphere(.5f,app); //app即外觀參數(shù)
圓柱體: Cylinder cylinder=new Cylinder(.5f,1.0f);
實(shí)例應(yīng)用:Java3D實(shí)現(xiàn)空間椎體
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">發(fā)送郵件</a>
*
* @since : 1.0 創(chuàng)建時(shí)間: 2013-5-6 下午02:50:08
*
* TODO : Java3D 各種三維形狀展示
*
*/
public class Java3DShape {
public Java3DShape(){
//構(gòu)建空間 和物體
// 創(chuàng)建一個(gè)虛擬空間
SimpleUniverse universe = new SimpleUniverse();
// 創(chuàng)建一個(gè)用來包含對(duì)象的數(shù)據(jù)結(jié)構(gòu)
BranchGroup group = new BranchGroup();
// 創(chuàng)建一個(gè)椎體并把它加入到group中
Cone cone=new Cone(.5f,1.0f,1,null) ; //錐體
group.addChild(cone);
//燈光構(gòu)造
Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f);
// 設(shè)置光線的顏色
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
// 設(shè)置光線的作用范圍
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
// 設(shè)置光線的方向
DirectionalLight light1= new DirectionalLight(light1Color, light1Direction);
// 指定顏色和方向,產(chǎn)生單向光源
light1.setInfluencingBounds(bounds);
// 把光線的作用范圍加入光源中
group.addChild(light1);
// 將光源加入group組
// 安放觀察點(diǎn)
universe.getViewingPlatform().setNominalViewingTransform();
// 把group加入到虛擬空間中
universe.addBranchGraph(group);
}
public static void main(String[] args) {
new Java3DShape();
}
}
效果圖:
實(shí)例應(yīng)用:Java3D實(shí)現(xiàn)空間球體
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">發(fā)送郵件</a>
*
* @since : 1.0 創(chuàng)建時(shí)間: 2013-5-6 下午02:50:08
*
* TODO : Java3D 各種三維形狀展示
*
*/
public class Java3DShape {
public Java3DShape(){
//構(gòu)建空間 和物體
// 創(chuàng)建一個(gè)虛擬空間
SimpleUniverse universe = new SimpleUniverse();
// 創(chuàng)建一個(gè)用來包含對(duì)象的數(shù)據(jù)結(jié)構(gòu)
BranchGroup group = new BranchGroup();
// 創(chuàng)建一個(gè)球并把它加入到group中
Sphere sphere = new Sphere(0.5f);// 小球的半徑為0.5米
group.addChild(sphere);
//燈光構(gòu)造
Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f);
// 設(shè)置光線的顏色
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
// 設(shè)置光線的作用范圍
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
// 設(shè)置光線的方向
DirectionalLight light1= new DirectionalLight(light1Color, light1Direction);
// 指定顏色和方向,產(chǎn)生單向光源
light1.setInfluencingBounds(bounds);
// 把光線的作用范圍加入光源中
group.addChild(light1);
// 將光源加入group組
// 安放觀察點(diǎn)
universe.getViewingPlatform().setNominalViewingTransform();
// 把group加入到虛擬空間中
universe.addBranchGraph(group);
}
public static void main(String[] args) {
new Java3DShape();
}
}
效果圖:

實(shí)例應(yīng)用:Java3D實(shí)現(xiàn)空間圓柱體
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">發(fā)送郵件</a>
*
* @since : 1.0 創(chuàng)建時(shí)間: 2013-5-6 下午02:50:08
*
* TODO : Java3D 各種三維形狀展示
*
*/
public class Java3DShape {
public Java3DShape(){
//構(gòu)建空間 和物體
// 創(chuàng)建一個(gè)虛擬空間
SimpleUniverse universe = new SimpleUniverse();
// 創(chuàng)建一個(gè)用來包含對(duì)象的數(shù)據(jù)結(jié)構(gòu)
BranchGroup group = new BranchGroup();
// 創(chuàng)建一個(gè)圓柱形狀并把它加入到group中
Cylinder cylinder=new Cylinder(.5f,1.0f); //圓柱型
group.addChild(cylinder);
//燈光構(gòu)造
Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f);
// 設(shè)置光線的顏色
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
// 設(shè)置光線的作用范圍
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
// 設(shè)置光線的方向
DirectionalLight light1= new DirectionalLight(light1Color, light1Direction);
// 指定顏色和方向,產(chǎn)生單向光源
light1.setInfluencingBounds(bounds);
// 把光線的作用范圍加入光源中
group.addChild(light1);
// 將光源加入group組
// 安放觀察點(diǎn)
universe.getViewingPlatform().setNominalViewingTransform();
// 把group加入到虛擬空間中
universe.addBranchGraph(group);
}
public static void main(String[] args) {
new Java3DShape();
}
}
效果圖:

相關(guān)文章
MFC Frame-Splitter模型實(shí)例原理解析
這篇文章主要介紹了MFC Frame-Splitter模型實(shí)例原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
淺談返回函數(shù)內(nèi)部new分配的內(nèi)存的引用
下面小編就為大家?guī)硪黄獪\談返回函數(shù)內(nèi)部new分配的內(nèi)存的引用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
Visual Studio Code配置C、C++環(huán)境并編寫運(yùn)行的方法
這篇文章主要介紹了Visual Studio Code配置C、C++環(huán)境并編寫運(yùn)行的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
C++實(shí)現(xiàn)LeetCode(106.由中序和后序遍歷建立二叉樹)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(106.由中序和后序遍歷建立二叉樹),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
基于Qt開發(fā)一個(gè)簡(jiǎn)單的OFD閱讀器
這篇文章主要為大家詳細(xì)介紹了如何使用Qt框架開發(fā)一個(gè)功能強(qiáng)大且性能優(yōu)異的OFD閱讀器,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2025-01-01
Ubuntu 20.04 下安裝配置 VScode 的 C/C++ 開發(fā)環(huán)境(圖文教程)
這篇文章主要介紹了Ubuntu 20.04 下安裝配置 VScode 的 C/C++ 開發(fā)環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

