package chen;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GraphicsConfiguration;
import java.awt.Toolkit;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.vecmath.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.*;
public class Gzg extends Applet{
/**
*
*/
private static final long serialVersionUID = 1L;
private JFrame jFrame = null;
private JPanel jPanel=null;
private JButton jButton = null;
public BranchGroup createBranchGroupSceneGraph(float ha,float ba,float t1a,float t2a,float ra){
BranchGroup BranchGroupRoot = new BranchGroup();
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
Color3f bgColor = new Color3f(0.76f,0.82f,0.88f);
Background bg = new Background(bgColor);
bg.setApplicationBounds(bounds);
BranchGroupRoot.addChild(bg);
Color3f directionalColor = new Color3f(1.0f, 1.0f, 1.0f);
Vector3f vec = new Vector3f(-1.0f, -1.0f, -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);
mouserotate.setSchedulingBounds(bounds);
BranchGroupRoot.addChild(mouserotate);
MouseZoom mousezoom = new MouseZoom();
mousezoom.setTransformGroup(transformgroup);
mousezoom.setSchedulingBounds(bounds);
BranchGroupRoot.addChild(mousezoom);
MouseTranslate mousetranslate = new MouseTranslate();
mousetranslate.setTransformGroup(transformgroup);
mousetranslate.setSchedulingBounds(bounds);
BranchGroupRoot.addChild(mousetranslate);
//System.out.println("二:"+h+b+d);
//Shape3D shapelinepoints=new ShapeLinesPoints();
Shape3D gzg=new ShapeQuadArray( ha, ba, t1a, t2a, ra);
transformgroup.addChild(gzg);
transformgroup.addChild(shapelines());//坐标轴的生成
BranchGroupRoot.compile();
return BranchGroupRoot;
}
private Shape3D shapelines() {
// TODO Auto-generated method stub
Shape3D shapelines0=new Shape3D();
float vertexes[]=
{
//X
-0.9f, 0.0f,0.0f, 0.9f,0.0f,0.0f,
0.88f, 0.02f,0.0f, 0.9f,0.0f,0.0f,
0.88f,-0.02f,0.0f, 0.9f,0.0f,0.0f,
//Y
0.0f,-0.8f,0.0f, 0.0f,0.8f,0.0f,
-0.02f,0.78f,0.0f, 0.0f,0.8f,0.0f,
0.02f,0.78f,0.0f, 0.0f,0.8f,0.0f,
//Z
0.0f,0.0f,-1.0f, 0.0f,0.0f,1.0f,
0.0f,0.02f,0.98f, 0.0f,0.0f,1.0f,
0.0f,-0.02f,0.98f, 0.0f,0.0f,1.0f
};
float colors[]=
{
1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f,
1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f,
1.0f,0.0f,0.0f, 1.0f,0.0f,0.0f,
0.0f,1.0f,0.0f, 0.0f,1.0f,0.0f,
0.0f,1.0f,0.0f, 0.0f,1.0f,0.0f,
0.0f,1.0f,0.0f, 0.0f,1.0f,0.0f,
0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f,
0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f,
0.0f,0.0f,1.0f, 0.0f,0.0f,1.0f
};
LineArray lines=new LineArray(18,LineArray.COORDINATES|LineArray.COLOR_3);
lines.setCoordinates(0, vertexes);
lines.setColors(0, colors);
LineAttributes lineattributes=new LineAttributes();
lineattributes.setLineWidth(0.5f);
lineattributes.setLineAntialiasingEnable(true);
lineattributes.setLinePattern(0);
Appearance app=new Appearance();
app.setLineAttributes(lineattributes);
shapelines0.setGeometry(lines);
shapelines0.setAppearance(app);
return shapelines0;
}
public Gzg(){
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D c=new Canvas3D(config);
add("Center",c);
BranchGroup BranchGroupScene=createBranchGroupSceneGraph(100f,68f,4.5f,4.5f,4.5f);
SimpleUniverse u=new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(BranchGroupScene);
}
public Gzg(float ha,float ba,float t1a,float t2a,float ra){
//System.out.println("一:"+h+b+d);//check
jFrame = new JFrame();
jFrame.setTitle("工字钢三维显示");
jFrame.getContentPane().setLayout(new BorderLayout());
jPanel = new JPanel(new BorderLayout());
jPanel.setBackground(new Color(255, 255, 255));
jButton=new JButton("OK");
jFrame.getContentPane().add("Center",jPanel);
jFrame.getContentPane().add("West",jButton);
jFrame.setSize(500,500);
//窗口居中
double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth(); // 得到窗体的宽
double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight();// 得到窗体的高
jFrame.setLocation((int) (width - jFrame.getWidth()) / 2, (int) (height - jFrame
.getHeight()) / 2);
jFrame.setVisible(true);
//setLayout(new BorderLayout());
GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration();
Canvas3D c=new Canvas3D(config);
jFrame.getContentPane().add("Center",c);
BranchGroup BranchGroupScene=createBranchGroupSceneGraph( ha, ba, t1a, t2a, ra);
SimpleUniverse u=new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(BranchGroupScene);
}
public static void main(String[] args){
//new Gzg(100f,68f,4.5f,4.5f);
new MainFrame(new Gzg(),500,500);
}
}
class ShapeQuadArray extends Shape3D{
public ShapeQuadArray(float ha,float ba,float t1a,float t2a,float ra){
super();
float h = ha / 150.0f;
float b = ba / 150.0f;
float t1 = t1a / 150.0f;
float t2 = t2a / 150.0f;
float r = ra / 150.0f;
float halflen = 0.8f;
double theta = Math.PI / 8.0;
float halfh = h / 2.0f;
float halfb = b / 2.0f;
float vertexes[]={
//-----------------------------正面-----------------------------
//顶部的右边
halfb, halfh, halflen,
t1 / 2 + r, halfh, halflen,
t1 / 2 + r, halfh - t2, halflen,
halfb, halfh - t2, halflen,
t1 / 2 + r, halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), halflen,
t1 / 2 + r, halfh - t2, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh, halflen,
t1 / 2, halfh, halflen,
t1 / 2, halfh - t2 - r, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), halflen,
//顶部左边:
- halfb, halfh, halflen,
- halfb, halfh - t2, halflen,
- t1 / 2 - r, halfh - t2, halflen,
- t1 / 2 - r, halfh, halflen,
- t1 / 2 - r, halfh, halflen,
- t1 / 2 - r, halfh - t2, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), halflen,
- t1 / 2, halfh - t2 - r, halflen,
- t1 / 2, halfh, halflen,
//底部左边:
- halfb, - halfh, halflen,
- t1 / 2 - r, - halfh, halflen,
- t1 / 2 - r, - halfh + t2, halflen,
- halfb, - halfh + t2, halflen,
- t1 / 2 - r, - halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), halflen,
- t1 / 2 - r, - halfh + t2, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh, halflen,
- t1 / 2, - halfh, halflen,
- t1 / 2, - halfh + t2 + r, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), halflen,
//底部右边:
halfb, - halfh, halflen,
halfb, - halfh + t2, halflen,
t1 / 2 + r, - halfh + t2, halflen,
t1 / 2 + r, - halfh, halflen,
t1 / 2 + r, - halfh, halflen,
t1 / 2 + r, - halfh + t2, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), halflen,
t1 / 2, - halfh + t2 + r, halflen,
t1 / 2, - halfh, halflen,
//中间:
t1 / 2, halfh, halflen,
- t1 / 2, halfh, halflen,
- t1 / 2, - halfh, halflen,
t1 / 2, - halfh, halflen,
//-----------------------------反面-----------------------------
//顶部右边:
halfb, halfh, - halflen,
halfb, halfh - t2, - halflen,
t1 / 2 + r, halfh - t2, - halflen,
t1 / 2 + r, halfh, - halflen,
t1 / 2 + r, halfh, - halflen,
t1 / 2 + r, halfh - t2, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), - halflen,
t1 / 2, halfh - t2 - r, - halflen,
t1 / 2, halfh, - halflen,
//顶部左边:
- halfb, halfh, - halflen,
- t1 / 2 - r, halfh, - halflen,
- t1 / 2 - r, halfh - t2, - halflen,
- halfb, halfh - t2, - halflen,
- t1 / 2 - r, halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), - halflen,
- t1 / 2 - r, halfh - t2, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh, - halflen,
- t1 / 2, halfh, - halflen,
- t1 / 2, halfh - t2 - r, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), - halflen,
//底部左边:
- halfb, - halfh, - halflen,
- halfb, - halfh + t2, - halflen,
- t1 / 2 - r, - halfh + t2, - halflen,
- t1 / 2 - r, - halfh, - halflen,
- t1 / 2 - r, - halfh, - halflen,
- t1 / 2 - r, - halfh + t2, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), - halflen,
- t1 / 2, - halfh + t2 + r, - halflen,
- t1 / 2, - halfh, - halflen,
//底部右边:
halfb, - halfh, - halflen,
t1 / 2 + r, - halfh, - halflen,
t1 / 2 + r, - halfh + t2, - halflen,
halfb, - halfh + t2, - halflen,
t1 / 2 + r, - halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), - halflen,
t1 / 2 + r, - halfh + t2, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh, - halflen,
t1 / 2, - halfh, - halflen,
t1 / 2, - halfh + t2 + r, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), - halflen,
//center:
t1 / 2, halfh, - halflen,
t1 / 2, - halfh, - halflen,
- t1 / 2, - halfh, - halflen,
- t1 / 2, halfh, - halflen,
//-----------------------------侧面-----------------------------
//顶部右边:
halfb, halfh, halflen,
halfb, halfh - t2, halflen,
halfb, halfh - t2, - halflen,
halfb, halfh, - halflen,
halfb, halfh - t2, halflen,
t1 / 2 + r, halfh - t2, halflen,
t1 / 2 + r, halfh - t2, - halflen,
halfb, halfh - t2, - halflen,
t1 / 2 + r, halfh - t2, halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), - halflen,
t1 / 2 + r, halfh - t2, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), halflen,
t1 / 2, halfh - t2 - r, halflen,
t1 / 2, halfh - t2 - r, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), - halflen,
//顶部左边:
- halfb, halfh, halflen,
- halfb, halfh, - halflen,
- halfb, halfh - t2, - halflen,
- halfb, halfh - t2, halflen,
- halfb, halfh - t2, halflen,
- halfb, halfh - t2, - halflen,
- t1 / 2 - r, halfh - t2, - halflen,
- t1 / 2 - r, halfh - t2, halflen,
- t1 / 2 - r, halfh - t2, halflen,
- t1 / 2 - r, halfh - t2, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), halfh - t2 - r * (1 - (float) Math.cos(theta)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), halfh - t2 - r * (1 - (float) Math.cos(theta * 2)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), halfh - t2 - r * (1 - (float) Math.cos(theta * 3)), - halflen,
- t1 / 2, halfh - t2 - r, - halflen,
- t1 / 2, halfh - t2 - r, halflen,
//底部左边:
- halfb, - halfh, halflen,
- halfb, - halfh + t2, halflen,
- halfb, - halfh + t2, - halflen,
- halfb, - halfh, - halflen,
- halfb, - halfh + t2, halflen,
- t1 / 2 - r, - halfh + t2, halflen,
- t1 / 2 - r, - halfh + t2, - halflen,
- halfb, - halfh + t2, - halflen,
- t1 / 2 - r, - halfh + t2, halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), - halflen,
- t1 / 2 - r, - halfh + t2, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), halflen,
- t1 / 2, - halfh + t2 + r, halflen,
- t1 / 2, - halfh + t2 + r, - halflen,
- t1 / 2 - r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), - halflen,
//底部右边:
halfb, - halfh, halflen,
halfb, - halfh, - halflen,
halfb, - halfh + t2, - halflen,
halfb, - halfh + t2, halflen,
halfb, - halfh + t2, halflen,
halfb, - halfh + t2, - halflen,
t1 / 2 + r, - halfh + t2, - halflen,
t1 / 2 + r, - halfh + t2, halflen,
t1 / 2 + r, - halfh + t2, halflen,
t1 / 2 + r, - halfh + t2, - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta)), - halfh + t2 + r * (1 - (float) Math.cos(theta)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 2)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 2)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), - halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), halflen,
t1 / 2 + r * (1 - (float) Math.sin(theta * 3)), - halfh + t2 + r * (1 - (float) Math.cos(theta * 3)), - halflen,
t1 / 2, - halfh + t2 + r, - halflen,
t1 / 2, - halfh + t2 + r, halflen,
//顶部四边形:
halfb, halfh, halflen,
halfb, halfh, - halflen,
- halfb, halfh, - halflen,
- halfb, halfh, halflen,
//底部四边形:
halfb, - halfh, halflen,
- halfb, - halfh, halflen,
- halfb, - halfh, - halflen,
halfb, - halfh, - halflen,
//左边四边形:
- t1 / 2, halfh - t2 - r, halflen,
- t1 / 2, halfh - t2 - r, - halflen,
- t1 / 2, - halfh + t2 + r, - halflen,
- t1 / 2, - halfh + t2 + r, halflen,
//右边四边形:
t1 / 2, halfh - t2 - r, halflen,
t1 / 2, - halfh + t2 + r, halflen,
t1 / 2, - halfh + t2 + r, - halflen,
t1 / 2, halfh - t2 - r, - halflen,
};
//0.8f,0.8f,0.9f
float colors[]={
//----------------------------------------正面
//顶右
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
//顶左
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
//底左
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
//底右
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
//中间
0.6f,0.6f,0.6f, 0.6f,0.6f,0.6f, 0.6f,0.6f,0.6f, 0.6f,0.6f,0.6f,
//0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f,
//----------------------------------------反面
//顶右
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
//顶左
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
//底左
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
//底右
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
//中间
0.6f,0.6f,0.6f, 0.6f,0.6f,0.6f, 0.6f,0.6f,0.6f, 0.6f,0.6f,0.6f,
//----------------------------------------侧面
//顶右
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
//顶左
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
//底左
0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.42f,0.40f,0.45f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
//底右
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f,
0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f, 0.42f,0.40f,0.45f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f, 0.7f,0.7f,0.7f,
};
int num = vertexes.length;
num /= 12;
QuadArray quadarray=
new QuadArray(num * 4,QuadArray.COORDINATES|
QuadArray.NORMALS|QuadArray.COLOR_3|QuadArray.TEXTURE_COORDINATE_2);
quadarray.setCoordinates(0, vertexes);
quadarray.setColors(0, colors);
//设置法向量
Vector3d v = new Vector3d();
Vector3f n = null;
for(int i = 0; i < num; i ++){
v.cross(new Vector3d(vertexes[i * 12 + 3] - vertexes[i * 12], vertexes[i * 12 + 4] - vertexes[i * 12 + 1], vertexes[i * 12 + 5] - vertexes[i * 12 + 2]),
new Vector3d(vertexes[i * 12 + 6] - vertexes[i * 12], vertexes[i * 12 + 7] - vertexes[i * 12 + 1], vertexes[i * 12 + 8] - vertexes[i * 12 + 2]));
v.normalize();
n = new Vector3f(v);
quadarray.setNormal(i * 4, n);
quadarray.setNormal(i * 4 + 1, n);
quadarray.setNormal(i * 4 + 2, n);
quadarray.setNormal(i * 4 + 3, n);
}
this.setGeometry(quadarray);
Appearance app=new Appearance();
PolygonAttributes polygonattributes = new PolygonAttributes();
polygonattributes.setCullFace(PolygonAttributes.CULL_NONE);
//polygonattributes.setCullFace(PolygonAttributes.CULL_BACK);
//polygonattributes.setCullFace(PolygonAttributes.CULL_FRONT);
//polygonattributes.setPolygonMode(PolygonAttributes.POLYGON_FILL);
app.setPolygonAttributes(polygonattributes);
Material material = new Material();
material.setAmbientColor(0.5f, 0.5f, 0.6f);//0.5f, 0.5f, 0.6f
material.setDiffuseColor(new Color3f(1.0f,1.0f,1.0f));//0.42f,0.40f,0.45f
material.setSpecularColor(0.2f, 0.2f, 0.2f);
material.setShininess(100.0f);
material.setCapability(Material.ALLOW_COMPONENT_WRITE);
app.setMaterial(material);
this.setAppearance(app);
}
}