IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
logo

FAQ JavaFXConsultez toutes les FAQ

Nombre d'auteurs : 4, nombre de questions : 507, derni�re mise � jour : 2 novembre 2016  Ajouter une question

 

Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur le forum JavaFX de http://java.developpez.com ainsi que l'exp�rience personnelle des auteurs.

Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant r�dacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.

SommaireSceneGraph3D (16)
pr�c�dent sommaire suivant
 

Pour tester si la 3D est support�e par votre plateforme, vous pouvez invoquer la m�thode isSupported() de la classe javafx.application.Platform en lui passant en param�tre la valeur javafx.application.ConditionalFeature.SCENE3D :

Code Java : S�lectionner tout
Platform.isSupported(ConditionalFeature.SCENE3D);

� l'heure actuelle (JDK8_u20), la 3D n'est pas disponible sur la version ARM du JDK destin�e aux plateformes embarqu�es (ex. : Raspberry Pi, etc.).

Mis � jour le 16 septembre 2014 bouye

Vous pouvez afficher de la 3D de deux mani�res :

  • dans la sc�ne : dans ce cas l�int�gralit� de votre affichage sera en 3D ;
  • dans une sous-sc�ne : un n�ud graphique de type javafx.scene.SubScene. Utiliser un tel objet permet par exemple d'avoir une IU 2D classique avec une vue 3D dans une partie de l'affichage.


Le fonctionnement de la 3D est identique, quel que soit le mode d'affichage choisi.

Mis � jour le 18 septembre 2014 bouye

La sc�ne supporte de base le positionnement dans l'espace 3D, ce qui veut dire que vous pouvez d'ores et d�j� commencer � disposer vos n�uds graphiques dans l'espace. Cependant, par d�faut, la sc�ne utilise une cam�ra parall�le (javafx.scene.ParallelCamera), c'est-�-dire une cam�ra qui ne permet pas de voir l'effet de profondeur, car l'axe Z est perpendiculaire � la surface de l��cran (le plan XY) en tout point de cette surface.

Pour activer l'effet de profondeur, il faut placer sur la sc�ne une cam�ra de perspective en cr�ant une instance de la classe javafx.scene.PerspectiveCamera :

Code Java : S�lectionner tout
scene.setCamera(new PerspectiveCamera());

D�sormais, les tangentes des axes Z convergent vers un seul et m�me point qui se trouve derri�re l��cran. L'effet de perspective fait que l��il voit la profondeur des objets.

Note : une cam�ra est un n�ud graphique, elle peut donc �tre plac�e dans la sc�ne ou un noeud parent et d�plac�e ou transform�e ce qui permet de changer le point de vue sur les objets rendus dans la sc�ne 3D (par exemple pour faire des flyby).

Mis � jour le 18 septembre 2014 bouye

Vous pouvez placer n'importe quel type de n�ud dans une sc�ne 3D : formes g�om�triques 2D, contr�les, groupes et gestionnaires de mise en page, graphiques de donn�es statistiques, vues sur image, m�dias ou web, et bien s�r des primitives 3D ou des sources d��clairage 3D.

Cependant, certaines fonctionnalit�s propres � la 3d, telles que l'ombrage ou la coloration dues aux sources d��clairage ne seront pas op�rantes sur les formes 2D ou les contr�les.

Mis � jour le 15 mars 2015 bouye

Les primitives 3D sont des classes qui h�ritent toutes de la classe abstraite javafx.scene.shape.Shape3D. Ces objets sont des n�uds graphiques, il est donc possible de les positionner et de les manipuler, de leur faire subir des effets ou transformations comme n'importe quel autre n�ud de SceneGraph.

Il actuellement existe quatre types de primitives 3D :

  • Box - une brique ou une boite d�finie par ses dimensions width sur l'axe X, height sur l'axe Y et depth sur l'axe Z. Peut servir � cr�er des cubes si les trois valeurs sont identiques. Le centre de la boite r�side en (0, 0, 0) ;
  • Sphere - une sph�re d�finie par son rayon radius. Le centre de la sph�re r�side en (0, 0, 0) ;
  • Cylinder - un cylindre d�fini par son rayon radius dans le plan Z ainsi que sa hauteur height suivant l'axe Y et le nombre de facettes divisions. Le nombre de facettes n'est pas modifiable apr�s cr�ation et sa valeur minimale est de 3, sa valeur par d�faut de 15. Le centre du cylindre r�side en (0, 0, 0) ;
  • MeshView - une vue sur un objet de type Mesh qui repr�sente une surface 3D cr�e � partir d'un nuage de points et de coordonn�es de texture.

Mis � jour le 15 mars 2015 bouye

Des exemples de filtres d'importation de mod�les 3D aux formats Obj, Maya, 3D Studio Max et Collada sont fournis dans les exemples et d�mos de JavaFX disponibles, tout comme les exemples du JDK, en tant que t�l�chargements annexes du JDK chez Oracle.

Des filtres d'importation de mod�les 3D en Mesh sont disponibles gratuitement pour une utilisation �ducative, commerciale ou personnelle sur le site InteractiveMesh.org d'Impressum.

Mis � jour le 18 septembre 2014 bouye

Il est possible de positionner des sources d��clairage dans la sc�ne. Ces objets h�ritent de la classe abstraite javafx.scene.LightBase. Ces objets sont des n�uds graphiques, il est donc possible de les positionner et de les manipuler, de leur faire subir des effets ou transformations comme n'importe quel autre n�ud de SceneGraph.

Il existe deux types de sources de lumi�re :

  • AmbientLight - une lumi�re ambiante qui baigne toute la sc�ne d'une lumi�re provenant de toutes les directions � la fois �clairant toutes les faces de tous les objets ;
  • PointLight - une source d'�clairage ponctuelle qui �met des rayons de lumi�re dans toutes les directions � partir de cette position. Les faces qui ne sont pas expos�es � cette source de lumi�re ne sont pas �clair�es.


Par d�faut, une source de lumi�re impacte automatiquement tous les n�uds 3D qui sont dans la m�me arborescence du SceneGraph qu'elle (tous les n�uds 3D qui sont des sous-n�uds du n�ud parent de la source de lumi�re). Cependant, une source d��clairage dispose d'une liste observable scope qui peut contenir la liste de tous les n�uds graphiques impact�s par cette source de lumi�re. Si cette liste scope d'une source de lumi�re n'est pas vide, les n�uds qui ne sont pas dans la liste ne sont pas �clair�s par cette source.

Note : actuellement (JDK8_25), pour des raisons de performances, un n�ud 3D ne peut pas �tre impact� par plus de trois sources de lumi�re diff�rentes. Les sources de lumi�re additionnelles seront ignor�es.

Lorsqu'une sc�ne ou une sous-sc�ne contient des objets 3D, mais qu'on n'y a pas positionn� de source de lumi�re, elle dispose d'une source d��clairage par d�faut : une lumi�re ponctuelle blanche est plac�e sur la position de la cam�ra et qui �claire tous les objets de la sc�ne.

Mis � jour le 18 septembre 2014 bouye

Il est possible de changer la couleur d'une source de lumi�re en changeant la valeur de sa propri�t� color.

Par exemple :

Code Java : S�lectionner tout
light1.setColor(Color.BLUE);

Cette instruction fait que notre source de lumi�re light1 �met d�sormais de la lumi�re bleue sur les objets contenus dans sa liste observable scope.

Mis � jour le 18 septembre 2014 bouye

Il est possible d'activer ou de d�sactiver une source de lumi�re en changeant la valeur de sa propri�t� lightOn.

Par exemple :

Code Java : S�lectionner tout
light1.setLightOn(false);

Cette instruction �teint la source de lumi�re light1 : celle-ci cesse d�sormais d��clairer les objets contenus dans sa liste observable scope.

Mis � jour le 18 septembre 2014 bouye

Le code suivant cr�e un cube et le positionne dans la sc�ne :

Code Java : S�lectionner tout
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
public class Main extends Application { 
  
    @Override 
    public void start(Stage primaryStage) { 
        // Cr�ation du cube. 
        final int size = 75; 
        final Box cube = new Box(size, size, size); 
        cube.setTranslateX(175); 
        cube.setTranslateY(150); 
        // Configuration du n�uds racine. 
        final Pane root = new Pane(); 
        root.setStyle("-fx-background-color: black;"); 
        root.getChildren().setAll(cube); 
        // Configuration de la sc�ne. 
        final Scene scene = new Scene(root, 350, 300, false, SceneAntialiasing.BALANCED); 
        scene.setCamera(new PerspectiveCamera()); 
        // Configuration de la fen�tre. 
        primaryStage.setTitle("Test d'affichage 3D"); 
        primaryStage.setScene(scene); 
        primaryStage.show(); 
    } 
  
    public static void main(String[] args) { 
        launch(args); 
    } 
}

Ce qui nous donne :



�videmment, notre cube �tant positionn� au centre de la sc�ne, nous ne voyons que la face avant et donc il ressemble � un simple rectangle gris.

Nous allons rajouter des animations pour mieux apercevoir les autres facettes du cube :

Code Java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
final TranslateTransition translateTransition = new TranslateTransition(Duration.seconds(10), cube); 
translateTransition.setInterpolator(Interpolator.LINEAR); 
translateTransition.setAutoReverse(true); 
translateTransition.setCycleCount(TranslateTransition.INDEFINITE); 
translateTransition.setFromY(0); 
translateTransition.setToY(300); 
final RotateTransition rotateTransition = new RotateTransition(Duration.seconds(5), cube); 
rotateTransition.setInterpolator(Interpolator.LINEAR); 
rotateTransition.setCycleCount(TranslateTransition.INDEFINITE); 
rotateTransition.setByAngle(360); 
rotateTransition.setAxis(Rotate.Y_AXIS); 
final ParallelTransition animation = new ParallelTransition(translateTransition, rotateTransition); 
animation.jumpTo(Duration.seconds(5)); 
animation.play();

Ce qui nous donne :



Ici, une animation de translation va d�placer le cube suivant l'axe Y ce qui permettra d'apercevoir les faces du dessus et du dessous gr�ce � la perspective tandis que l'animation de rotation va nous permettre de voir les faces initialement cach�es sur les c�t�s et � l�arri�re du cube. Nous avons bien un affichage en 3D !

Modifions maintenant l��clairage pour ajouter une source de lumi�re ambiante :

Code Java : S�lectionner tout
1
2
3
final AmbientLight ambientLight = new AmbientLight(Color.WHITE.deriveColor(0, 0, 0.25, 0)); 
ambientLight.getScope().add(cube); 
root.getChildren().add(ambientLight);

Ce qui nous donne :



Puisque nous avons ajout� une source d��clairage dans la sc�ne, la source de lumi�re par d�faut n'est plus active. La seule lumi�re provient donc de l��clairage ambiant que nous venons d�ins�rer et qui �claire toutes les faces de la m�me mani�re. On n'arrive plus � distinguer les faces les unes des autres.

Corrigeons cela en ajoutant une nouvelle source de lumi�re, ponctuelle cette fois :

Code Java : S�lectionner tout
1
2
3
4
5
6
final PointLight pointLight = new PointLight(Color.ORANGE); 
pointLight.setTranslateX(300); 
pointLight.setTranslateY(300); 
pointLight.setTranslateZ(-300); 
pointLight.getScope().add(cube); 
root.getChildren().addAll(pointLight);

Ce qui nous donne :



Notre cube est d�sormais �clair� par une source de lumi�re ponctuelle de couleur orange qui se trouve sur le c�t� inf�rieur droit de la sc�ne et hors de l��cran. Les faces orient�es vers la droite, le haut ou l�arri�re par rapport � ce point ne sont donc pas baign�es de lumi�re orange.

Mis � jour le 18 septembre 2014 bouye

Il est possible d'activer le mode rendu fil de fer (wireframe) sur un n�ud 3D en modifiant la valeur de sa propri�t� drawMode.

Par exemple :

Code Java : S�lectionner tout
cube.setDrawMode(DrawMode.LINE);

Ce qui nous donne :



Ici, nous avons activ� le rendu fil de fer sur notre cube, nous voyons donc que chaque face du cube est en fait constitu�e de deux triangles mis c�te � c�te dans le m�me plan.

Par d�faut, la propri�t� drawMode est � la valeur DrawMode.FILL qui fait que les faces sont compl�tement remplies par le mat�riau plac� sur le cube.

Mis � jour le 15 mars 2015 bouye

Il est possible de modifier le mode d'occultation des faces d'un n�ud 3D en modifiant la valeur de sa propri�t� cullFace.

Par exemple :

Code Java : S�lectionner tout
cube.setCullFace(CullFace.FRONT);

Ce qui nous donne :



Ici, les faces du cube dirig�es vers l'utilisateur sont occult�es et on aper�oit l�int�rieur du cube.

Les valeurs possibles sont :
  • CullFace.BACK - la valeur par d�faut. Les faces qui ne sont pas dirig�es vers l'utilisateur ne sont pas visibles ;
  • CullFace.FRONT - les faces du cube dirig�es vers l'utilisateur sont occult�es ; on voit l�int�rieur des objets ;
  • CullFace.NONE - aucune occultation ; on voit un peu un m�lange de toutes les faces.

Mis � jour le 18 septembre 2014 bouye

Un mat�riau est un objet de type javafx.scene.paint.Material qui permet d'appliquer des propri�t�s visuelles sur les faces d'un n�ud 3D, par exemple sa couleur diffuse (sa couleur de base), sa texture, son taux sp�culaire (combien il r�fl�chit de lumi�re re�ue), etc. � l'heure actuelle, la seule impl�mentation pr�sente dans l'API est la classe javafx.scene.paint.PhongMaterial.

Il est possible de sp�cifier le mat�riau d'un n�ud 3D en changeant la valeur de sa propri�t� material.

Mis � jour le 18 septembre 2014 bouye

Pour sp�cifier une couleur unie sur un objet (sa couleur diffuse), il suffit de cr�er une instance de type PhongMaterial avec la couleur donn�e et de l'appliquer � la propri�t� material de notre n�ud 3D.

Par exemple :

Code Java : S�lectionner tout
1
2
final PhongMaterial material = new PhongMaterial(Color.CYAN); 
cube.setMaterial(material);

Ce qui nous donne :



D�sormais, les faces de notre rectangle sont de couleur cyan au lieu d��tre simplement grises.

Il est �galement possible de modifier la valeur de la propri�t� diffuseColor de l'objet de type PhongMaterial.

Mis � jour le 18 septembre 2014 bouye

Pour sp�cifier une texture sur un objet (sa diffuse map), il suffit de cr�er une instance de type PhongMaterial avec une Image contenant la texture choisie et de l'appliquer � la propri�t� material de notre n�ud 3D.

Par exemple :

Code Java : S�lectionner tout
1
2
3
final Image diffuseMap = new Image(getClass().getResource("1-Marble-Texture-1.jpg").toExternalForm()); 
final PhongMaterial material = new PhongMaterial(Color.WHITE, diffuseMap, null, null, null);  
cube.setMaterial(material);

Ce qui nous donne :



L'image utilis�e pour la texture provient du site Naldz Graphic

D�sormais, les faces de notre rectangle sont textur�es avec l'image que nous avons utilis�e. Ici la couleur diffuse s'applique sur la texture, si la couleur diffuse avait �t� Color.CYAN par exemple, la texture serait apparue bleut�e.

Il est �galement possible de modifier la valeur de la propri�t� diffuseMap de l'objet de type PhongMaterial.

Mis � jour le 18 septembre 2014 bouye

Pour sp�cifier la couleur sp�culaire d'un objet (la couleur qui est �mise par la lumi�re qui se r�fl�chit sur la surface de l'objet comme sur une couche de vernis), il suffit de cr�er une instance de type PhongMaterial et de modifier sa propri�t� specularColor en lui donnant comme valeur la couleur d�sir�e.

Par exemple :

Code Java : S�lectionner tout
material.setSpecularColor(Color.RED);

Ce qui nous donne :



D�sormais, notre cube r�fl�chira la lumi�re en �mettant de la couleur rouge.

Il est �galement possible de modifier la valeur de la propri�t� specularPower de l'objet de type PhongMaterial pour modifier l�intensit� de la r�flexion.

Par exemple :

Code Java : S�lectionner tout
material.setSpecularPower(50);

La valeur par d�faut de la propri�t� specularPower est 32.

Mis � jour le 18 septembre 2014 bouye

Proposer une nouvelle r�ponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �a


R�ponse � la question

Liens sous la question
pr�c�dent sommaire suivant
 

Les sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.