frac10
Messages postés6Date d'inscriptionsamedi 15 janvier 2005StatutMembreDernière intervention 7 avril 2006
-
10 mars 2006 à 16:08
frac10
Messages postés6Date d'inscriptionsamedi 15 janvier 2005StatutMembreDernière intervention 7 avril 2006
-
17 mars 2006 à 09:38
Bonjour à tous d'abord,
débutant en Java, je suis en train d'essayer d'afficher un canvas3D dans un JDesktopPane de ma JFrame. Mon but serait d'arriver à changer la couleur du cube 3D (contenu dans le canvas3D) à partir de 3 JSlider (Rouge, Vert et Bleu).
Or, quand je lance l'application, je vois bien mes 3 sliders (plus le JEditorPane que j'ai ajouté uniquement pour voir si le changement de couleur fonctionnait...) mais pas ma scène en 3D (pas d'erreur à la compilation)... :-(
Bref, si quelqu'un avait une petite idée de mon erreur (qui doit être grossière je pense, vu mon inexpérience en Java), je l'en remercie énormément d'avance !!!
// Etape 4 :
// Creation d'un objet SimpleUniverse
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
// Etape 5 :
// Positionnement du point d'observation pour avoir une vue correcte de la
// scene 3D
simpleU.getViewingPlatform().setNominalViewingTransform();
// Etape 6 :
// Creation de la scene 3D qui contient tous les objets 3D que l'on veut visualiser
BranchGroup scene = createSceneGraph();
// Etape 7 :
// Compilation de la scene 3D
scene.compile();
// Etape 8:
// Attachement de la scene 3D a l'objet SimpleUniverse
simpleU.addBranchGraph(scene);
}
/**
* Creation de la scene 3D qui contient tous les objets 3D
* @return scene 3D
*/
public BranchGroup createSceneGraph() {
// Creation de l'objet parent qui contiendra tous les autres objets 3D
BranchGroup parent = new BranchGroup();
// Creation d'une lumiere ambiante de couleur blanche
BoundingSphere bounds = new BoundingSphere(new Point3d(), 100);
Light ambientLight = new AmbientLight(new Color3f(Color.white));
ambientLight.setInfluencingBounds(bounds);
parent.addChild(ambientLight);
// Creation d'une lumiere directionnelle de couleur blanche
Light directionalLight = new DirectionalLight(
new Color3f(Color.white),
new Vector3f(1, -1, -1));
directionalLight.setInfluencingBounds(bounds);
parent.addChild(directionalLight);
// Creation du groupe de transformation sur lequel vont s'appliquer les
// comportements
TransformGroup mouseTransform = new TransformGroup();
// Le groupe de transformation sera modifie par le comportement de la
// souris
mouseTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
mouseTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// Creation comportement rotation a la souris
MouseRotate rotate = new MouseRotate(mouseTransform);
rotate.setSchedulingBounds(new BoundingSphere());
parent.addChild(rotate);
// Creation comportement deplacement a la souris
MouseTranslate translate = new MouseTranslate(mouseTransform);
translate.setSchedulingBounds(new BoundingSphere());
parent.addChild(translate);
// Creation comportement zoom a la souris
MouseZoom zoom = new MouseZoom(mouseTransform);
zoom.setSchedulingBounds(new BoundingSphere());
parent.addChild(zoom);
Background background = new Background(new Color3f(Color.white));
background.setApplicationBounds(new BoundingBox());
parent.addChild(background);
// Chargement de l'objet Wavefront et ajout au graphe de la scene
mouseTransform.addChild(new Box(0.5f, 0.5f, 0.2f, null));
parent.addChild(mouseTransform);
dmaillet
Messages postés500Date d'inscriptionmercredi 20 août 2003StatutMembreDernière intervention11 juillet 2007 17 mars 2006 à 08:37
Tu vires
private Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
et tu mets
private Canvas3D canvas3D;
dans tes declarations
et dans ton constructeur Bof ou dans le initialize() tu appelles getCanvas();
dmaillet
Messages postés500Date d'inscriptionmercredi 20 août 2003StatutMembreDernière intervention11 juillet 2007 16 mars 2006 à 11:45
Avec du retard, mais mieux vaut tard que jamais!
un canvas3d n'a pas de dimension par defaut, donc il suffit de lui donnner une dimension et c'est parti...
canvas3d.setSize(200,200); par exemple, ou d'utiliser un layout s'en chargeant...
frac10
Messages postés6Date d'inscriptionsamedi 15 janvier 2005StatutMembreDernière intervention 7 avril 2006 16 mars 2006 à 15:31
Merci beaucoup de m'avoir répondu, mais en fait je l'ai dimensionné le canvas3d (tout en bas) : "canvas3d.setSize(new java.awt.Dimension(100,100)" (ne pas faire gaffe au (000,100) du post, je l'ai modifié et cela ne change rien)...
Je ne sais vraiment pas comment faire, parce que rien ne s'affiche : j'ai essayé avec un layout, çà marche, mais je voudrai le faire avec JDesktopPane pour pouvoir "mettre en page" comme je veux. Si il y avait une autre idée...
dmaillet
Messages postés500Date d'inscriptionmercredi 20 août 2003StatutMembreDernière intervention11 juillet 2007 16 mars 2006 à 15:39
Non, ton erreur est simple, tu n'appelles pas la methode getCanvas3D() pour creer ton canvas si tu regardes bien, dans tes declarations en haut tu fais
private Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
alors forcement, tu ne passes pas par le setSize... change ca, et ca marche (j'avais essaye avant de te repondre evidemment...)
dams
Vous n’avez pas trouvé la réponse que vous recherchez ?