1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
public class Interface3D extends javax.swing.JFrame {
private SimpleUniverse univ = null;
private BranchGroup scene = null;
private javax.swing.JPanel drawingPanel;
public void genere_volume_3d(int n,Fonction f,Appearance app,TransformGroup objTrans){
double[] coordonnee=new double[n];
double[] longueurs=new double[n];
coordonnee[0]=-6;
coordonnee[1]=-6;
coordonnee[2]=-6;
longueurs[0]=12;
longueurs[1]=12;
longueurs[2]=12;
NodePave root=new NodePave(coordonnee,longueurs,2);
ArbrePaves a=new ArbrePaves(root,f);
a.coupe_k(root,n,5);
a.test(root,n);
a.affinage_fin(root,n,2);
genere_paves3d(root,n,app,objTrans);
}
public void genere_paves3d(NodePave noeud,int n,Appearance app,TransformGroup objTrans){
if(noeud.getLeft()==null & noeud.getRight()==null){
if(noeud.getIn_or_Out()==2){
affiche_pave(noeud,app,objTrans);
}
}
else if (noeud.getLeft()!=null & noeud.getRight()==null){
genere_paves3d(noeud.getLeft(),n,app,objTrans);
}
else if (noeud.getLeft()==null & noeud.getRight()!=null){
genere_paves3d(noeud.getRight(),n,app,objTrans);
}
else{
genere_paves3d(noeud.getLeft(),n,app,objTrans);
genere_paves3d(noeud.getRight(),n,app,objTrans);
}
}
public void affiche_pave(NodePave noeud, Appearance app, TransformGroup objTrans){
Transform3D cubeMat = new Transform3D();
TransformGroup cubeTrans = new TransformGroup(cubeMat);
float Xp=(float)(noeud.getCoordonnee()[0]/9);
float Yp=(float)(noeud.getCoordonnee()[1]/9);
float Zp=(float)(noeud.getCoordonnee()[2]/9);
float Lx=(float)(noeud.getLongueurs()[0]/9);
float Ly=(float)(noeud.getLongueurs()[1]/9);
float Lz=(float)(noeud.getLongueurs()[2]/9);
cubeMat.set(new Vector3d(Xp+Lx/2.0,Yp+Ly/2.0,Zp+Lz/2.0));
cubeTrans.setTransform(cubeMat);
cubeTrans.addChild(new Box(Lx,Ly,Lz,app));
objTrans.addChild(cubeTrans);
}
public BranchGroup createSceneGraph(int n,Fonction f) {
BranchGroup objRoot = new BranchGroup();
TransformGroup objTrans = new TransformGroup();
objRoot.addChild(objTrans);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
Color3f col1=new Color3f(0.5f,0.0f,0.0f);
Vector3f vect1=new Vector3f(0.5f,0.5f,0.5f);
DirectionalLight dl1=new DirectionalLight(true,col1,vect1);
dl1.setInfluencingBounds(new BoundingSphere());
objRoot.addChild(dl1);
Color3f col2=new Color3f(0.0f,0.5f,0.0f);
Vector3f vect2=new Vector3f(-0.5f,-0.5f,-0.5f);
DirectionalLight dl2=new DirectionalLight(true,col2,vect2);
dl2.setInfluencingBounds(new BoundingSphere());
objRoot.addChild(dl2);
Color3f col3=new Color3f(0.0f,0.0f,0.5f);
Vector3f vect3=new Vector3f(-0.5f,-0.5f,0.5f);
DirectionalLight dl3=new DirectionalLight(true,col3,vect3);
dl3.setInfluencingBounds(new BoundingSphere());
objRoot.addChild(dl3);
Color3f col4=new Color3f(0.5f,0.5f,0.5f);
Vector3f vect4=new Vector3f(0.0f,0.0f,+0.5f);
DirectionalLight dl4=new DirectionalLight(true,col4,vect4);
dl2.setInfluencingBounds(new BoundingSphere());
objRoot.addChild(dl4);
Material m=new Material();
Appearance app = new Appearance();
app.setMaterial(m);
genere_volume_3d(n,f,app,objTrans);
objRoot.compile();
return objRoot;
}
private Canvas3D createUniverse() {
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
univ = new SimpleUniverse(c);
univ.getViewingPlatform().setNominalViewingTransform();
univ.getViewer().getView().setMinimumFrameCycleTime(5);
return c;
}
public Interface3D(Fonction fo) {
Fonction f=fo;
int n=3;
initComponents();
Canvas3D c = createUniverse();
drawingPanel.add(c, java.awt.BorderLayout.CENTER);
scene = createSceneGraph(n,f);
ViewingPlatform viewingPlatform = univ.getViewingPlatform();
univ.getViewingPlatform().setNominalViewingTransform();
OrbitBehavior orbit = new OrbitBehavior(c, OrbitBehavior.REVERSE_ALL);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
orbit.setSchedulingBounds(bounds);
viewingPlatform.setViewPlatformBehavior(orbit);
univ.addBranchGraph(scene);
}
private void initComponents() {
drawingPanel = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Interface3D");
drawingPanel.setLayout(new java.awt.BorderLayout());
drawingPanel.setPreferredSize(new java.awt.Dimension(700,700));
getContentPane().add(drawingPanel, java.awt.BorderLayout.CENTER);
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Fonction fo=new Astroide();
new Interface3D(fo).setVisible(true);
}
});
}
} |
Partager