?? t3dgeometry.java~29~
字號:
package j3ddemo;
import javax.media.j3d.Shape3D;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;
/**
* <p>Title: Java 3D Demo</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author Sttony
* @version 1.0
*/
public class T3DGeometry extends Shape3D {
public T3DGeometry() {
}
static double cPi=3.1415926535897932384626433832795;
// 按照指定的類型創建一個形體,參數分別是平移距離,位置矢量,旋轉角速度和類型
static Group createObject(double scale, Vector3d vPos,
int fD, String strType) {
// 創建一個變換對象節點.
Transform3D t = new Transform3D();
t.set(scale, vPos);
TransformGroup objTrans = new TransformGroup(t);
// 創建第二個變換節點。
TransformGroup spinTg = new TransformGroup();
spinTg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// 旋轉軸
Transform3D rotAxis = new Transform3D();
// 質材的相關參數
Appearance ap=null;
Color3f objColor=null;
Material mm=null;
// 根據傳入的字符串創建不同的對象
int Type = 0;
Primitive retObj = null;
if (strType == "立方體")
Type = 1;
if (strType == "圓錐")
Type = 2;
if (strType == "齒輪")
Type = 3;
if (strType == "組合形體")
Type = 4;
switch (Type) {
case 1:
// 設置質材和渲染方式
objColor = new Color3f(1.0f, 0.2f, 0.4f);
ap = new Appearance();
mm = new Material();
mm.setLightingEnable(true);
mm.setSpecularColor(objColor);
ap.setMaterial(mm);
retObj = new Box(0.2f, 0.2f, 0.2f, ap);
break;
case 2:
rotAxis.rotX(cPi/4);
// 設置質材和渲染方式
objColor = new Color3f(0.0f, 0.2f, 0.4f);
ap = new Appearance();
mm = new Material();
mm.setLightingEnable(true);
mm.setSpecularColor(objColor);
ap.setMaterial(mm);
retObj= new Cone(0.1f,0.5f,ap);
break;
case 3:
break;
case 4:
break;
default:
return null;
}
// 增加
spinTg.addChild(retObj);
// 為形體創建一個行為,根據傳入的角速度值創建
Alpha rotationAlpha = new Alpha( -1, Alpha.INCREASING_ENABLE,
0, 0,
fD, 0, 0,
0, 0, 0);
RotationInterpolator rotator =
new RotationInterpolator(rotationAlpha, spinTg, rotAxis,
0.0f, (float) Math.PI * 2.0f);
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
rotator.setSchedulingBounds(bounds);
objTrans.addChild(rotator);
objTrans.addChild(spinTg);
return objTrans;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -