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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Java Discussion :

[Java3D] Couleur de la face inférieure d'un cube


Sujet :

3D Java

  1. #1
    Membre confirmé Avatar de Maxi-môme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 144
    Par défaut [Java3D] Couleur de la face inférieure d'un cube
    Bonjour à tous !

    Je poste ici car après moulte recherche, je n'ai pas trouvé de solution à mon problème!

    Voilà, j'ai crée un cube avec des couleurs pour chacune des 6 faces. En plus de ça, j'ai ajouté une rotation selon l'axe y et une rotation selon l'axe z.

    Jusque là tout va bien.

    Le hic, c'est que je vois très bien les faces gauche, droite, avant, arrière et haute, mais pas la face basse de mon cube. Elle reste par défaut de couleur noire et ce n'est pas ce que j'ai demadé à mon programme !

    Je me demande si il n'y a pas une question de normales.

    Can you help me ?

  2. #2
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Un peu de code serait le bienvenu

  3. #3
    Membre confirmé Avatar de Maxi-môme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 144
    Par défaut
    Voilà mon code, je sais que c'est pas forcément très "propre" mais je suis débutant, pardonnez moi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    class DessinCube extends Shape3D
    {
        public DessinCube()
        {
        // Les coordonnees des 24 sommets des 6 faces visibles du cube
        // Face 1
        Point3f face1_s1 = new Point3f(-0.5f, 0.5f, 0.5f);
        Point3f face1_s2 = new Point3f(-0.5f, -0.5f, 0.5f);
        Point3f face1_s3 = new Point3f( 0.5f, -0.5f, 0.5f);
        Point3f face1_s4 = new Point3f( 0.5f, 0.5f, 0.5f);
     
        // Face 2
        Point3f face2_s1 = new Point3f( 0.5f, 0.5f, 0.5f);
        Point3f face2_s2 = new Point3f( 0.5f, -0.5f, 0.5f);
        Point3f face2_s3 = new Point3f( 0.5f, -0.5f, -0.5f);
        Point3f face2_s4 = new Point3f( 0.5f, 0.5f, -0.5f);
     
        // Face 3
        Point3f face3_s1 = new Point3f( 0.5f, 0.5f, -0.5f);
        Point3f face3_s2 = new Point3f( 0.5f, -0.5f, -0.5f);
        Point3f face3_s3 = new Point3f(-0.5f, -0.5f, -0.5f);
        Point3f face3_s4 = new Point3f(-0.5f, 0.5f, -0.5f);
     
        // Face 4
        Point3f face4_s1 = new Point3f(-0.5f, 0.5f, -0.5f);
        Point3f face4_s2 = new Point3f(-0.5f, -0.5f, -0.5f);
        Point3f face4_s3 = new Point3f(-0.5f, -0.5f, 0.5f);
        Point3f face4_s4 = new Point3f(-0.5f, 0.5f, 0.5f);
     
        // Face 5
     
        Point3f face5_s1 = new Point3f(-0.5f, 0.5f, 0.5f);
        Point3f face5_s2 = new Point3f(0.5f, 0.5f, 0.5f);
        Point3f face5_s3 = new Point3f(0.5f, 0.5f, -0.5f);
        Point3f face5_s4 = new Point3f(-0.5f, 0.5f, -0.5f);
     
        // Face 6
     
        Point3f face6_s1 = new Point3f(-0.5f, -0.5f, 0.5f);
        Point3f face6_s2 = new Point3f(0.5f, -0.5f, 0.5f);
        Point3f face6_s3 = new Point3f(0.5f, -0.5f, -0.5f);
        Point3f face6_s4 = new Point3f(-0.5f, -0.5f, -0.5f);
     
        // Normales
     
         Vector3f[] normales =
         {
            new Vector3f( 0.0f,  0.0f,  1.0f), // face avant
            new Vector3f( 0.0f,  0.0f, -1.0f), // face arrière
            new Vector3f( 1.0f,  0.0f,  0.0f), // face droite
            new Vector3f(-1.0f,  0.0f,  0.0f), // face gauche
            new Vector3f( 0.0f,  1.0f,  0.0f), // face haute
            new Vector3f( 0.0f, -1.0f,  0.0f), // face basse
           };
     
     // Ensemble de points définissant un clipping sur la texture.
     
     TexCoord2f[] textureCoord =
     {
           new TexCoord2f(0.0f, 0.0f),
           new TexCoord2f(1.0f, 0.0f),
           new TexCoord2f(1.0f, 1.0f),
           new TexCoord2f(0.0f, 1.0f)
      };
     
        // Les couleurs des 4 faces visibles du cube
        Color3f color1 = new Color3f(Color.magenta);
        Color3f color2 = new Color3f(Color.red);
        Color3f color3 = new Color3f(Color.yellow);
        Color3f color4 = new Color3f(Color.white);
        Color3f color5 = new Color3f(Color.blue);
        Color3f color6 = new Color3f(Color.black);
        Color3f color7 = new Color3f(Color.green);
        Color3f color8 = new Color3f(Color.cyan);
     
        // Construction de l'objet geometrique QuadArray constitue de 24
        // points
        QuadArray quadArray = new QuadArray(24,QuadArray.COORDINATES |
           QuadArray.NORMALS | QuadArray.COLOR_3 | QuadArray.TEXTURE_COORDINATE_2);
     
        // Tableau des points constituant les 6 faces (quadrilateres) qui
        // sont visibles
        quadArray.setCoordinates(0, new Point3f[] {
        /* face 1 */             face1_s1, face1_s2, face1_s3, face1_s4,
        /* face 2 */             face2_s1, face2_s2, face2_s3, face2_s4,
        /* face 3 */             face3_s1, face3_s2, face3_s3, face3_s4,
        /* face 4 */             face4_s1, face4_s2, face4_s3, face4_s4,
        /* face 5 */             face5_s1, face5_s2, face5_s3, face5_s4,
        /* face 6 */             face6_s1, face6_s2, face6_s3, face6_s4
     
        });
     
        // Tableau des couleurs des 4 sommets de chaque face
        quadArray.setColors(0, new Color3f[] {
        /* couleur face 1 */ color1, color2, color3, color4,
        /* couleur face 2 */ color4, color3, color7, color8,
        /* couleur face 3 */ color8, color7, color6, color5,
        /* couleur face 4 */ color5, color6, color2, color1,
        /* couleur face 5 */ color1, color4, color8, color5,
        /* couleur face 6 */ color6, color2, color3, color7
        });
     
     /*----- Remplissage des normales en chacun des points -----*/
        int i;
        for (i = 0; i<24; i++) quadArray.setNormal(i,normales[i/4]);
     
    /*----- Liaison sommets et points de clipping de la texture -----*/
     
        for (i=0; i<24; i++) quadArray.setTextureCoordinate(0,i,textureCoord[i%4]);
     
      this.setGeometry(quadArray);
    } // fin constructeur DessinCube
     
    } // fin de la classe DessinCube extends Shape3D

  4. #4
    Membre confirmé Avatar de Maxi-môme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 144
    Par défaut
    Ne cherchez plus, j'ai trouvé l'erreur !

    En fait dans mon code qui est dans le message précédent les coordonnées de ma face 6 ne sont pas dans le bon sens. En effet, pour qu'une face soit visible, il faut que les coordonnées des sommets respectent le sens direct, c'est à dire le sens inverse des aiguilles d'une montre.

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut Ou alors...
    Sinon pour que java3d dessine les 2 faces de tes polygones, et ne plus te soucier du sens horaire ou non, il faut utiliser ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PolygonAttributes pa = new PolygonAttributes();
    pa.setCullFace(PolygonAttributes.CULL_NONE);
    Ceci est a fixer à l'apparence (Appearance) de ton cube...
    Bien entendu cela demandera plus de ressources, mais sur de petits univers, la différence est quasi-invisible....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Java3D] Affichage wireframe des faces
    Par fjxokt dans le forum 3D
    Réponses: 0
    Dernier message: 11/06/2009, 14h14
  2. Réponses: 2
    Dernier message: 08/05/2009, 10h22
  3. Affecter une couleur à chaque face d'un polygone
    Par Pragmateek dans le forum OpenGL
    Réponses: 16
    Dernier message: 26/02/2009, 18h55
  4. Réponses: 1
    Dernier message: 06/05/2008, 10h10
  5. [DX9][C#] Problème couleur faces et arretes d'un cube
    Par lancer83 dans le forum DirectX
    Réponses: 3
    Dernier message: 07/07/2006, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo