?? point5.java
字號:
package com.java3d.test;
import java.applet.Applet; //可作為小程序應用
import java.awt.BorderLayout; //窗體布局管理器
import com.sun.j3d.utils.applet.MainFrame; //建立主窗體用
import com.sun.j3d.utils.universe.*; //Java3D空間類
import com.sun.j3d.utils.geometry.*; //可直接調用的形狀
import javax.vecmath.*; //矢量運算引用
import javax.media.j3d.*; //Java3D核心引用@SuppressWarnings("serial")
public class Point5 extends Applet {
private BranchGroup createSceneGraph(){
BranchGroup objRoot = new BranchGroup();
//建立子圖根節點
objRoot.addChild(createObject());
//將createObject子程序建立的Group作為字節點
objRoot.compile();
//編譯3D場景
return objRoot;
//返回該節點
}
private Group createObject(){
Transform3D t = new Transform3D();
TransformGroup objTrans = new TransformGroup(t);
//創建變換組,并用Transform3D三維變換組來初始化
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); //設置變換組為可改變狀態
Shape3D shape = new pointShape();
//pointShape是外部函數,內容為建立六個位置顏色各不同的點
//pointShape我就不寫了,不用六個點也可以,只要是Shape3D的形狀就行
objTrans.addChild(shape);
//將這組點放入變換組中
//這里的shape可以換成別的已經建立好的形狀如com.sun.j3d.utils.geometry.ColorCube
Transform3D yAxis = new Transform3D();
//三維變換組,這里打算讓點圍繞Y軸轉動
Alpha rotationAlpha = new Alpha(-1,Alpha.INCREASING_ENABLE,0,0,4000,0,0,0,0,0);
/*
* Alpha類對象用于創建隨時間變化的功能。
* Alpha(int loopCount, long increasingAlphaDuration)
* 這個構造函數僅僅把loopCount和increasingAlphaDuration作為其參數,
* 而對所有其它的參數則賦以默認值。這導致了Alpha對象產生從0遞增到1之間的值。
* loopCount參數提供了循環次數。如果loopCount是–1, alpha對象則無限循環下去。
* 從0增長到1的時間則在第二個參數中以毫秒的形式指定。
* 參數:
* loopCount – 運行這個alpha對象的次數。值為 -1時則作無限循環。
* increasingAlphaDuration – alpha從0增長到1的時間,以毫秒形式指定。
*/
RotationInterpolator rotator = new RotationInterpolator(rotationAlpha,objTrans,yAxis,0.0f,(float)Math.PI*2.0f);
/*
* RotationInterpolator(Alpha alpha, TransformGroup target)
* 這個類定義了一個行為,能在一對角度(指定的Alpha對象所產生的值)之間線性地插入修改其目標TransoformGroup的旋轉組件。
* 這個插入的角度就用于生成一個變換。
* 參數:
* alpha –根據函數的引用的不同而時間也不同。
* target – 要修改的TransformGroup對象
*/
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),50.0);
//定義可視范圍
rotator.setSchedulingBounds(bounds);
//將旋轉器為設定可視范圍
objTrans.addChild(rotator);
//將行為添加到變化組中
return objTrans;
//返回該變化組
}
public Point5(){
//構造函數,建立對象時執行
setLayout(new BorderLayout());
//設置布局器為java.awt.BorderLayout
Canvas3D c =new Canvas3D(SimpleUniverse.getPreferredConfiguration());
//創建3D畫布,并應用顯卡環境獲取參數
add("Center",c);
//將畫布添加到主窗體
BranchGroup scene = createSceneGraph();
//將Group根節點獲取到scene
SimpleUniverse u = new SimpleUniverse(c);
//用畫布創建空間模型
u.getViewingPlatform().setNominalViewingTransform();
////切換模型到位圖模式迫使我們能看得到3D場景
u.addBranchGraph(scene);
//將scene場景放入空間中
}
public static void main(String[] args){
new MainFrame(new Point5(),400,400);
//用主程序創建基本窗體,建立對象,自動運行構造函數進行各項生成
}}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -