最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 3D入門之基本圖形功能 附源碼

 更新時間:2021年10月18日 10:45:25   作者:GuochaoHN  
Java3D API是Sun定義的用于實現(xiàn)3D顯示的接口。3D技術是底層的顯示技術,Java3D提供了基于Java的上層接口。Java3D把OpenGL和DirectX這些底層技術包裝在Java接口中。這種全新的設計使3D技術變得不再繁瑣且可以加入到J2SE、J2EE的整套架構,故保證了Java3D技術強大的擴展性

坐標系

在這里插入圖片描述

  • 1、原點O在顯示器的中間。
  • 2、Z軸是指向屏幕之外的,也就是觀察者。
  • 3、由于觀察者眼睛,即觀察方向是指向Z軸的反方向,所以當定義好圖形之后,光源的方向一定不能是指向Z軸的正方向,否則無法觀察到圖形。(根據(jù)光的反射)

基本體組合的顯示實例

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;

import javax.media.j3d.*;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.behaviors.mouse.MouseZoom;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class towprimitivedisplay extends Applet {
	public BranchGroup createBranchGroup()	
	    {
		//定義BranchGroup
		BranchGroup BranchGroupRoot = new BranchGroup ();
		
		//創(chuàng)建球心在坐標系原點球形范圍
		BoundingSphere bounds = new BoundingSphere(new Point3d( 0.0,0.0,0.0),100.0);
		
		//定義背景顏色
		Color3f bgColor=new Color3f(.0f,.0f,.0f);
		Background bg=new Background(bgColor);
		bg.setApplicationBounds(bounds);
		BranchGroupRoot.addChild(bg);
		
		//定義平行光、顏色、照射方向與作用范圍
		Color3f directionColor=new Color3f(1.f,1.f,1.f);
		Vector3f vec=new Vector3f(1.0f,-1.0f,-1.0f);
		DirectionalLight directionalLight= new DirectionalLight(directionColor,vec);
		directionalLight.setInfluencingBounds(bounds);
		BranchGroupRoot.addChild(directionalLight);
		
		//定義總的TransformGroup:transformgroup
		TransformGroup transformgroup=new TransformGroup();
		
		//設置對該TransformGroup的讀寫能力
		transformgroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		transformgroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
		
		//將該TransformGroup加入到BranchGroupRoot中
		BranchGroupRoot.addChild(transformgroup);
		
		//定義鼠標對場景的旋轉、平移與放大功能
		MouseRotate mouserotate=new MouseRotate();
		mouserotate.setTransformGroup(transformgroup);
		BranchGroupRoot.addChild(mouserotate);
		mouserotate.setSchedulingBounds(bounds);
		
		MouseZoom mousezoom=new MouseZoom();
		mousezoom.setSchedulingBounds(bounds);
		BranchGroupRoot.addChild(mousezoom);
		mousezoom.setSchedulingBounds(bounds);
		
		MouseTranslate mousetranslate=new MouseTranslate();
		mousetranslate.setTransformGroup(transformgroup);
		BranchGroupRoot.addChild(mousetranslate);
		mousetranslate.setSchedulingBounds(bounds);
		
		//定義兩個三維型體的外觀
		Appearance app1=new Appearance();
		Material material1=new Material();
		material1.setDiffuseColor(new Color3f(1.0f,.0f,0.0f));
		app1.setMaterial(material1);
		
		Appearance app2=new Appearance();
		Material material2=new Material();
		material2.setDiffuseColor(new Color3f(0.0f,1.0f,0.0f));
		app2.setMaterial(material2);
		
		//定義一個球體于一個長方體的大小、外觀屬性與坐標變換,并定義相應的TransformGroup:ta1、ta2
		TransformGroup tg1=new TransformGroup();
		tg1.addChild(new Sphere(0.3f,app1));
		Transform3D t=new Transform3D();
		t.setTranslation(new Vector3f(0.f,-0.425f,0.f));		
		TransformGroup tg2=new TransformGroup(t);
		tg2.addChild(new Box(0.5f,0.05f,0.5f,app2));
		
		//將定義好的兩個TransformGroup(tg1、tg2)加入到總的transformgroup
		transformgroup.addChild(tg1);
		transformgroup.addChild(tg2);
		
		//對BranchGroupRoot預編譯
		BranchGroupRoot.compile();
		
		//通過方法名返回BranchGroupRoot
		return BranchGroupRoot;
		}
	    public towprimitivedisplay()
	   {
	    //設置顯示界面的相關參數(shù)
	    setLayout(new BorderLayout());
	    //創(chuàng)建投影平面Canvas3D
	    GraphicsConfiguration gc=SimpleUniverse.getPreferredConfiguration();
	    Canvas3D c=new Canvas3D(gc);
	    //將投影平面上的圖像顯示在顯示平面的中間
	    add("Center",c);
	    //設置SimpleUniverse,由系統(tǒng)選擇視點在z軸的正向,觀察方向沿z軸反向
	    BranchGroup BranchGroupScene=createBranchGroup();
	    SimpleUniverse u=new SimpleUniverse(c);
	    u.getViewingPlatform().setNominalViewingTransform();
	    //將BranchGroup:BranchGroupScene加入到SimpleUniverse:u中
	    u.addBranchGraph(BranchGroupScene);
	   }
	    
	    public static void main(String[] args)
	    {//通過MainFrame顯示圖像
	    	
	    	new MainFrame(new towprimitivedisplay(),300,300);
	    	
	    }
}

由于光源方向是:
Vector3f vec=new Vector3f(-1.f,-1.f,-1.0f); 即指向第七象限。所以結果是:

在這里插入圖片描述

如果改變光源方向:
Vector3f vec=new Vector3f(0.0f,0.0f,-1.0f);光源指向Z軸反方向

在這里插入圖片描述


Vector3f vec=new Vector3f(-1.0f,0.0f,0.0f);光源指向X軸反方向

在這里插入圖片描述

三角面圖形

以一維數(shù)組給出頂點的坐標值,從前向后一次以3個頂點形成一個三角形,并且上一個三角形與下一個三角形之間沒有公共頂點。

import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;

import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.PolygonAttributes;
import javax.media.j3d.Shape3D;

import javax.media.j3d.TransformGroup;
import javax.media.j3d.TriangleArray;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.behaviors.mouse.MouseZoom;

import com.sun.j3d.utils.universe.SimpleUniverse;

import java.applet.Applet;


public class DisplayTriangles extends Applet {
	public BranchGroup createBranchGroup() {
		BranchGroup BranchGroupRoot = new BranchGroup();
		BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
		Color3f bgColor = new Color3f(1.0f, 1.0f, 1.0f);
		Background bg = new Background(bgColor);
		bg.setApplicationBounds(bounds);
		BranchGroupRoot.addChild(bg);
		
		Color3f directionalColor = new Color3f(1.f, 0.f, 0.f);
		Vector3f vec = new Vector3f(0.f, 0.f, -1.0f);
		DirectionalLight directionalLight = new DirectionalLight(directionalColor, vec);
		directionalLight.setInfluencingBounds(bounds);
		BranchGroupRoot.addChild(directionalLight);
		
		TransformGroup transformgroup = new TransformGroup();
		transformgroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		transformgroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
		BranchGroupRoot.addChild(transformgroup);
		
		MouseRotate mouserotate = new MouseRotate();
		mouserotate.setTransformGroup(transformgroup);
		BranchGroupRoot.addChild(mouserotate);
		mouserotate.setSchedulingBounds(bounds);
		MouseZoom mousezoom = new MouseZoom();
		mousezoom.setTransformGroup(transformgroup);
		BranchGroupRoot.addChild(mousezoom);
		mousezoom.setSchedulingBounds(bounds);
		MouseTranslate mousetranslate = new MouseTranslate();
		mousetranslate.setTransformGroup(transformgroup);
		BranchGroupRoot.addChild(mousetranslate);
		mousetranslate.setSchedulingBounds(bounds);
		
		transformgroup.addChild(new TriangleArrays());
		BranchGroupRoot.compile();
		return BranchGroupRoot;
	}

	public DisplayTriangles() {
		setLayout(new BorderLayout());
		GraphicsConfiguration gc = SimpleUniverse.getPreferredConfiguration();
		Canvas3D c = new Canvas3D(gc);
		add("Center", c);
		BranchGroup BranchGroupScene = createBranchGroup();
		SimpleUniverse u = new SimpleUniverse(c);
		u.getViewingPlatform().setNominalViewingTransform();
		u.addBranchGraph(BranchGroupScene);
	}

	public static void main(String[] args) {
		new MainFrame(new DisplayTriangles(), 300, 300);
	}
}

//outsideclass
class TriangleArrays extends Shape3D {
	public TriangleArrays() {
		int vCount = 12;
		float vertexes[] = { -0.6f,0.9f,0.0f,  -0.6f,-0.9f,0.2f,
				             -0.4f, 0.9f, -0.2f, -0.2f, -0.9f, 0.2f, 
				              0.0f, 0.9f,-0.2f,   0.0f, -0.9f, 0.2f, 
				              0.2f, 0.7f, 0.0f,   0.2f, -0.9f, 0.3f,
				              0.5f, 0.8f, -0.3f,   0.6f, -.9f, 0.0f,
				              0.8f, 0.9f, 0.2f,   0.8f, -0.8f, 0.3f };
		float colors[] = { 0.0f,0.5f,1.0f,    0.0f,0.5f,1.0f,
                0.0f,0.8f,.0f,    1.0f,0.0f,0.3f,
                0.0f,1.0f,0.5f,   0.9f,1.0f,0.0f,
                0.5f,0.0f,1.0f,   0.0f,0.5f,1.0f,
                1.0f,0.5f,0.0f,   1.0f,0.0f,0.5f,
                1.0f,0.8f,0.0f,   1.0f,0.5f,0.0f};
		TriangleArray trianglearray = new TriangleArray(vCount, TriangleArray.COORDINATES | TriangleArray.COLOR_3);
		trianglearray.setCoordinates(0, vertexes);
		trianglearray.setColors(0, colors);
		PolygonAttributes polygonattributes = new PolygonAttributes();
		//polygonattributes.setCullFace(PolygonAttributes.CULL_NONE);
//polygonattributes.setCullFace(PolygonAttributes.CULL_FRONT);
polygonattributes.setCullFace(PolygonAttributes.CULL_BACK);
		Appearance app = new Appearance();
		app.setPolygonAttributes(polygonattributes);
		this.setGeometry(trianglearray);
		this.setAppearance(app);
	}
}

在這里插入圖片描述

三角扇圖形

以第一個頂點為公用頂點,依次與其余頂點分別連接形成三角形。其中給定的定點數(shù)至少為3個。

class ShapeTriangleFanArray extends Shape3D {
	public ShapeTriangleFanArray() {
		int vertexesCount = 12;
		int stripCount[] = new int[1];
//int stripCount[]=new int[2];
//int stripCount[]=new int[3];
		float vertexes[] = { .0f, 0.9f, 0.0f, -1.f, -0.8f, 0.f, 
				-0.8f, -0.6f, -0.2f, -0.6f, -0.9f, 0.2f,
				-0.4f, -0.8f,-0.2f, 0.f, -0.8f, 0.2f, 
				0.2f, -0.5f, 0.0f, 0.4f, -0.6f, -0.5f, 
				0.6f, -0.8f, -0.3f, 0.8f, -0.9f, -0.2f,
				0.9f, -0.7f, -0.2f, 1.1f, -0.8f, -0.3f 
				};
		float colors[] = { 0.0f, 0.5f, 1.0f, 0.0f, 0.5f, 1.0f, 
				0.0f, 0.8f, .0f, 1.0f, 0.0f, 0.3f, 
				0.0f, 1.0f, 0.5f,0.9f, 1.0f, 0.0f, 
				0.5f, 0.0f, 1.0f, 0.0f, 0.5f, 1.0f, 
				1.0f, 0.5f, 0.0f, 1.0f, 0.0f, 0.5f, 
				1.0f, 0.8f,0.0f, 1.0f, 0.5f, 0.0f };
		stripCount[0] = 12;
//stripCount[1]=4;
//stripCount[2]=4;
		TriangleFanArray triangleFanarray = new TriangleFanArray(vertexesCount,
				TriangleFanArray.COORDINATES | TriangleFanArray.COLOR_3, stripCount);
		triangleFanarray.setCoordinates(0, vertexes);
		triangleFanarray.setColors(0, colors);
		PolygonAttributes polygonattributes = new PolygonAttributes();
		polygonattributes.setCullFace(PolygonAttributes.CULL_NONE);
		Appearance app = new Appearance();
		app.setPolygonAttributes(polygonattributes);
		this.setGeometry(triangleFanarray);
		this.setAppearance(app);
	}
}

int stripCount[];數(shù)組表示生成的三角扇個數(shù)
eg:總共十二個頂點
new stripCount[1],表示生成一個扇區(qū)。所以stripCount[0]=12,這一個扇區(qū)有十二個點。

該程序,用頂點顏色插值生成線與面顏色,這種顏色無需光照,也能顯示。

在這里插入圖片描述

四邊面圖形

以頂點坐標數(shù)組中給出的一維頂點數(shù)組,從前向后依次以4個頂點形成一個四邊形面,并且相鄰兩個四邊形面之間沒有公用頂點。給定的總的頂點數(shù)必須是4的倍數(shù)。

class ShapeQuadArray extends Shape3D 
{public ShapeQuadArray() 
{int vertexCount=12;
float vertexes[]={ -0.8f,0.9f,0.0f, -0.8f,-0.8f,0.f,
                   -0.6f,-0.8f,0.f, -0.6f,0.9f,0.f,
                   -0.4f,0.9f,0.f,  -0.4f,-0.7f,-0.9f,
                    0.4f,-0.8f,0.f,  0.4f,0.8f,0.0f,
                    0.5f,0.8f,0.f,   0.6f,-0.8f,0.0f,
                    0.8f,-0.7f,0.f,  0.8f,0.8f,0.f};
float colors[]={0.0f,0.5f,1.0f,  0.0f,0.5f,1.0f,
                0.0f,0.8f,.0f,   1.0f,0.0f,0.3f,
                0.0f,1.0f,0.5f,  0.9f,1.0f,0.0f,
                0.5f,0.0f,1.0f,  0.0f,0.5f,1.0f,
                1.0f,0.5f,0.0f,  1.0f,0.0f,0.5f,
                1.0f,0.8f,0.0f,  1.0f,0.5f,0.0f };
QuadArray quadarray=new QuadArray(vertexCount,
QuadArray.COORDINATES|QuadArray.COLOR_3);
quadarray.setCoordinates(0,vertexes);
quadarray.setColors(0,colors);
PolygonAttributes polygonattributes=new PolygonAttributes();
polygonattributes.setCullFace(PolygonAttributes.CULL_NONE);
//polygonattributes.setCullFace(PolygonAttributes.CULL_BACK);
//polygonattributes.setCullFace(PolygonAttributes.CULL_FRONT);
Appearance app=new Appearance();
app.setPolygonAttributes(polygonattributes);
this.setGeometry(quadarray);
this.setAppearance(app);
}}       

在這里插入圖片描述

到此這篇關于Java 3D入門之基本圖形功能 附源碼的文章就介紹到這了,更多相關Java 3D內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java 實現(xiàn)加密數(shù)據(jù)庫連接的步驟

    Java 實現(xiàn)加密數(shù)據(jù)庫連接的步驟

    這篇文章主要介紹了Java 實現(xiàn)加密數(shù)據(jù)庫連接的步驟,幫助大家更好的理解和使用Java處理數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • Java response響應體和文件下載實現(xiàn)原理

    Java response響應體和文件下載實現(xiàn)原理

    這篇文章主要介紹了Java response響應體和文件下載實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • java編程實現(xiàn)兩個大數(shù)相加代碼示例

    java編程實現(xiàn)兩個大數(shù)相加代碼示例

    這篇文章主要介紹了java編程實現(xiàn)兩個大數(shù)相加代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • JAVA內部類示例詳解及練習

    JAVA內部類示例詳解及練習

    這篇文章主要為大家詳細介紹了Java的內部類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 自己動手實現(xiàn)mybatis動態(tài)sql的方法

    自己動手實現(xiàn)mybatis動態(tài)sql的方法

    下面小編就為大家分享一篇自己動手實現(xiàn)mybatis動態(tài)sql的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • SpringBoot事件發(fā)布與監(jiān)聽超詳細講解

    SpringBoot事件發(fā)布與監(jiān)聽超詳細講解

    今天去官網(wǎng)查看spring boot資料時,在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關于SpringBoot事件發(fā)布和監(jiān)聽的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • java實現(xiàn)發(fā)牌小程序

    java實現(xiàn)發(fā)牌小程序

    這篇文章主要為大家詳細介紹了java實現(xiàn)發(fā)牌小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • ApiOperation和ApiParam注解依賴的安裝和使用以及注意事項說明

    ApiOperation和ApiParam注解依賴的安裝和使用以及注意事項說明

    這篇文章主要介紹了ApiOperation和ApiParam注解依賴的安裝和使用以及注意事項說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • MyBatis使用注解開發(fā)實現(xiàn)步驟解析

    MyBatis使用注解開發(fā)實現(xiàn)步驟解析

    這篇文章主要介紹了MyBatis使用注解開發(fā)實現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Maven基礎之如何修改本地倉庫的默認路徑

    Maven基礎之如何修改本地倉庫的默認路徑

    這篇文章主要介紹了Maven基礎之如何修改本地倉庫的默認路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

竹溪县| 张家界市| 乳山市| 吉水县| 远安县| 娄烦县| 东乡县| 桃园县| 阜宁县| 隆安县| 邯郸县| 成都市| 苗栗市| 奈曼旗| 肇庆市| 诸城市| 蒙自县| 长武县| 华池县| 图木舒克市| 柘城县| 英德市| 剑川县| 永靖县| 班戈县| 吉林市| 怀仁县| 报价| 鄂温| 宁城县| 盐池县| 墨脱县| 崇明县| 广灵县| 新竹县| 浮山县| 渭源县| 平塘县| 梧州市| 普陀区| 饶阳县|