📄 t3dgeometry.java~28~
字号:
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/2);
// 设置质材和渲染方式
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 + -