📄 j3dapplet.java~139~
字号:
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;
Node 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 com.sun.j3d.utils.geometry.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.2f,0.5f,ap);
break;
case 3:
ap = new Appearance();
// Set up the coloring properties
objColor = new Color3f(0.5f, 0.0f, 0.2f);
ColoringAttributes ca = new ColoringAttributes();
ca.setColor(objColor);
ap.setColoringAttributes(ca);
// Set up the polygon attributes
PolygonAttributes pa = new PolygonAttributes();
pa.setPolygonMode(pa.POLYGON_LINE);
pa.setCullFace(pa.CULL_NONE);
ap.setPolygonAttributes(pa);
retObj= new T3DGeometry(0.3f,ap);
break;
case 4:
String texImage=null;
ap=new Appearance();
/*try {
texImage = new java.net.URL(getCodeBase().toString() +
"wind.jpg").toString();
}
catch (java.net.MalformedURLException ex) {
System.out.println(ex.getMessage());
System.exit(1);
}*/
texImage="E:\\Java\\JProject\\J3DDemo\\classes\\j3ddemo\\wind.jpg";
TextureLoader tex = new TextureLoader(texImage, this);
ap.setTexture(tex.getTexture());
TextureAttributes texAttr = new TextureAttributes();
texAttr.setTextureMode(TextureAttributes.MODULATE);
ap.setTextureAttributes(texAttr);
objColor = new Color3f(0.0f, 0.0f, 0.0f);
Color3f white= new Color3f(1.0f, 1.0f, 1.0f );
mm = new Material();
mm.setLightingEnable(true);
mm.setSpecularColor(objColor);
mm.setAmbientColor(white);
mm.setDiffuseColor(white);
mm.setShininess(1.0f);
ap.setMaterial(mm);
retObj= new T3DGeometry(0.5f,ap);
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);
bg.setCapability(bg.ALLOW_DETACH );
bg.addChild(objTrans);
return bg;
//return objTrans;
}
public Group createText(double scale, int fD) {
BranchGroup bg=new BranchGroup();
Transform3D t = new Transform3D();
t.set(scale, new Vector3d(0.0,0.0,0.0));
TransformGroup objTrans = new TransformGroup(t);
// 创建第二个变换节点。
TransformGroup spinTg = new TransformGroup();
spinTg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// 旋转轴
Transform3D rotAxis = new Transform3D();
// 创建3D文字
float sl= txtString.length();
Font3D f3d= new Font3D(new Font("仿宋", Font.PLAIN, 2),
new FontExtrusion());
Text3D txt = new Text3D(f3d, txtString,
new Point3f( -sl / 2.0f, -1.f, -1.f));
Shape3D sh = new Shape3D();
// 设置质材和渲染方式
Appearance app = new Appearance();
Material mm = new Material();
mm.setLightingEnable(true);
app.setMaterial(mm);
sh.setAppearance(app);
sh.setGeometry(txt);
//objTrans.addChild(sh);
// 增加
spinTg.addChild(sh);
// 为形体创建一个行为,根据传入的角速度值创建
int nfD= (int)(fD/1.5f);
Alpha rotationAlpha = new Alpha( -1, Alpha.INCREASING_ENABLE,
0, 0,
nfD, 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);
bg.addChild(objTrans);
bg.setCapability(bg.ALLOW_DETACH);
return bg;
//return objTrans;
}
//Main method
public static void main(String[] args) {
J3DApplet applet = new J3DApplet();
applet.isStandalone = true;
Frame frame;
frame = new Frame();
frame.setTitle("Applet Frame");
frame.add(applet, BorderLayout.CENTER);
applet.init();
applet.start();
frame.setSize(800,620);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
frame.setVisible(true);
}
void jSlider2_mouseClicked(MouseEvent e) {
int value = jSlider2.getValue();
fD =(int) ( (1-(float)value /100 )* 8000.0);
updataView();
}
void jSlider2_mouseDragged(MouseEvent e) {
int value = jSlider2.getValue();
fD =(int) ( (1-(float)value /100 )* 8000.0);
updataView();
}
void jSlider2_keyPressed(KeyEvent e) {
int value = jSlider2.getValue();
fD =(int) ( (1-(float)value /100 )* 8000.0);
updataView();
}
void jComboBox_TopLeft_itemStateChanged(ItemEvent e) {
ibgType[0]=jComboBox_TopLeft.getSelectedIndex()+1;
updataView();
}
void jComboBox_TopRight_itemStateChanged(ItemEvent e) {
ibgType[1]=jComboBox_TopRight.getSelectedIndex()+1;
updataView();
}
void jComboBox_ButtomLeft_itemStateChanged(ItemEvent e) {
ibgType[2]=jComboBox_ButtomLeft.getSelectedIndex()+1;
updataView();
}
void jComboBox_ButtomRight_itemStateChanged(ItemEvent e) {
ibgType[3]=jComboBox_ButtomRight.getSelectedIndex()+1;
updataView();
}
void jButton_ChangText_actionPerformed(ActionEvent e) {
txtString= jTextField_txtString.getText();
updataView();
}
}
class J3DApplet_jSlider2_mouseAdapter extends java.awt.event.MouseAdapter {
J3DApplet adaptee;
J3DApplet_jSlider2_mouseAdapter(J3DApplet adaptee) {
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e) {
adaptee.jSlider2_mouseClicked(e);
}
}
class J3DApplet_jSlider2_mouseMotionAdapter extends java.awt.event.MouseMotionAdapter {
J3DApplet adaptee;
J3DApplet_jSlider2_mouseMotionAdapter(J3DApplet adaptee) {
this.adaptee = adaptee;
}
public void mouseDragged(MouseEvent e) {
adaptee.jSlider2_mouseDragged(e);
}
}
class J3DApplet_jSlider2_keyAdapter extends java.awt.event.KeyAdapter {
J3DApplet adaptee;
J3DApplet_jSlider2_keyAdapter(J3DApplet adaptee) {
this.adaptee = adaptee;
}
public void keyPressed(KeyEvent e) {
adaptee.jSlider2_keyPressed(e);
}
}
class J3DApplet_jComboBox_TopLeft_itemAdapter implements java.awt.event.ItemListener {
J3DApplet adaptee;
J3DApplet_jComboBox_TopLeft_itemAdapter(J3DApplet adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.jComboBox_TopLeft_itemStateChanged(e);
}
}
class J3DApplet_jComboBox_TopRight_itemAdapter implements java.awt.event.ItemListener {
J3DApplet adaptee;
J3DApplet_jComboBox_TopRight_itemAdapter(J3DApplet adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.jComboBox_TopRight_itemStateChanged(e);
}
}
class J3DApplet_jComboBox_ButtomLeft_itemAdapter implements java.awt.event.ItemListener {
J3DApplet adaptee;
J3DApplet_jComboBox_ButtomLeft_itemAdapter(J3DApplet adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.jComboBox_ButtomLeft_itemStateChanged(e);
}
}
class J3DApplet_jComboBox_ButtomRight_itemAdapter implements java.awt.event.ItemListener {
J3DApplet adaptee;
J3DApplet_jComboBox_ButtomRight_itemAdapter(J3DApplet adaptee) {
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e) {
adaptee.jComboBox_ButtomRight_itemStateChanged(e);
}
}
class J3DApplet_jButton_ChangText_actionAdapter implements java.awt.event.ActionListener {
J3DApplet adaptee;
J3DApplet_jButton_ChangText_actionAdapter(J3DApplet adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton_ChangText_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -