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

OpenGL Discussion :

[Debutant] Bizarre :S


Sujet :

OpenGL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut [Debutant] Bizarre :S
    Bonjour à tous,

    Ma question est simple : pourquoi ça marche pas ^^ .

    J'ai une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void afficheTexte(int x, int y, char* str)
    {
      int i;
      int longueur;
     
      glRasterPos2f(x, y);
      longueur = (int) strlen(str);
      for (i = 0; i < longueur; i++)
      {
        glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
      }
    }
    Je l'utilise comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        // textes
        glColor3f(1.0,1.0,1.0); // blanc
     
        itoa(posPiece,tmp,10); // conversion de l'entier (base 10) en chaine de caractères
        afficheTexte(-50.0,20.0,"Piece :");
        afficheTexte(-42.0,20.0,tmp);
     
        itoa(fps,tmp,10); // conversion de l'entier (base 10) en chaine de caractères
        afficheTexte(-100.0,20.0,"FPS :");
        afficheTexte(-92.0,20.0,tmp);
    Et mes textes sont affichés en BLEU ! Je ne comprend absolument pas pourquoi ...

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glDisable(GL_TEXTURE_2D);
    avant d'afficher ton text, la en fait il utilise le texel de coordonnée (0,0) qui module la couleur finale
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Merci, mais j'avais bien désactivé les texturages précédants. J'ai testé de rajouter cette ligne avant, ça ne change malheureusement rien.

  4. #4
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Et si tu remplaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glColor3f(1.0,1.0,1.0); // blanc
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glColor4f(1.0,1.0,1.0,1.0); // blanc
    Pour être sur que ta chaîne n'est pas dessinée sur une surface bleu avec un peu de blending...

    Pour être sur ajoute

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Je te remercie mais ça ne change toujours rien. Ce qui est étonnant, c'est que sous linux, j'ai bien du texte blanc ! (avec le même code).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    J'ai un autre problème, je galère avec les lumières :S Je souhaite faire des spots mais ils sont omnidirectionnelles à première vue, moi je souhaite éclairer uniquement une partie de mes objets, comme un vrai spot directionnel.

    Voila comment j'ai fait :
    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
     
    GLfloat ambient_spots[] = { 0.0 , 0.0 , 0.0 , 1.0 };
    GLfloat diffuse_spots[] = { 0.60 , 0.60 , 0.60 , 1.0 };
    GLfloat specular_spots[] = { 0.0 , 0.0 , 0.0 , 1.0 };
    GLfloat direction_spots[] = { 1.0 , 0.0 , 0.0 , 0.0 };
    GLfloat position_spots[] = { 2.0 , 1.5 , 6.0 , 0.0 };
     
    glLightfv(GL_LIGHT2, GL_AMBIENT, ambient_spots);
    glLightfv(GL_LIGHT2, GL_DIFFUSE, diffuse_spots);
    glLightfv(GL_LIGHT2, GL_SPECULAR, specular_spots);
    glLightfv(GL_LIGHT2, GL_POSITION, position_spots);
    glLightf(GL_LIGHT2, GL_SPOT_CUTOFF, 5.0); // éclaire d'un angle de 5
    glLightfv(GL_LIGHT2, GL_SPOT_DIRECTION, direction_spots);
     
    glEnable(GL_LIGHTING);
     
    glEnable(GL_LIGHT2);
    Alors ça m'affiche bien des élcairages qui éclairent du bon coté, mais alors vraiment diffus l'éclairage ... est-ce qu'il n'y a pas un truc tout bête que j'aurais pu oublier ?

    Merci d'avance.

  7. #7
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 53
    Par défaut
    Salut,


    Je ne comprend pas trop le problème, mais tu n'as mis des coefficients non nuls que pour GL_DIFFUSE, donc si l'éclairage est diffus, c'est que c'est bon non ? Il y a d'autres paramètres que tu peux trapatouiller, comme les atténuations, si le résultat n'est pas satisfaisant.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Ah, merci. Ce serait quoi alors, une lumière spéculaire pour un spot ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Si je met juste de la composante spéculaire, ça ne change rien :S Toujours une lumière qui éclaire tout.

  10. #10
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    je te conseille d'aller voir ici :

    http://www.xmission.com/~nate/tutors.html

    télécharge le zip, il contient des exemples d'utilisation d'un spotlight
    et pleins d'autres utiles

    pour le spotlight tu lances "LightMaterial.exe"
    tu fais un click droit dans les paramètres et tu sélectionnes "SpotLight attenuation"
    ensuite tu joues avec "cutoff" et "exponent"
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Merci, vraiment sympas ces petits programmes, mais je ne trouve ni cutoff ni attenuation ...
    (c'est d'ailleur bizarre, car c'est dans le code source)

  12. #12
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    la fenêtre est divisée en 3, tu as 2 vues 3D : "screen-space view" et "world-space" view"

    à côté la partie la plus grande, "command manipulation window" est par défaut sur les paramètres de la lumière omnidirectionnelle

    fais un click droit dans cette partie et sélectionnes "spotlight attenuation"

    les paramètres de la partie "command manipulation window" vont changer et au milieu tu auras accès à "GLfloat spot_direction[]" et surtout juste en dessous : "GLint spot_exponent" et "spot_cutoff" dont je parlais

    penses à faire un click droit dans tous les exemples et dans toutes les vues (world, screen, command) pour avoir accès à des options
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Merci pour ton aide ! Déja, j'avais fait une erreur, pour la position, la dernière valeur, je l'avais mise à 0 et à première vue, pour les spots, il faut la mettre a 1.0

    Lorsque je la met à 1, c'est mieux ... j'ai une lumière qui se dirige n'importe comment, c'est n'importe quoi.

    Sur cette screen shot, les surfaces blanches, ce sont des tableaux, le point rouge sur la carte, c'est la camera et le point jaune, c'est la lumière. Elle est censée être dirigée vers -z, c'est à dire vers le tableau qui est juste devant la lumière. Pourtant, ça éclaire n'importe comment les éléments de la pièce !



  14. #14
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    tu as bien activé la lumière avec :
    glEnable(GL_LIGHTING)
    et
    glEnable(GL_LIGHTx) avec x le numéro de la lumière
    bien que je ne pense pas que ton problème vienne de là

    et surtout, chose importante à savoir, les spots de base tels que proposés par opengl fonctionne par vertex
    donc si tu veux un halo lumineux, projection de la lumière sur un mur, il faut le subdiviser en pleins de carrés et non pas en un seul grand carré

    après c'est peut-etre une question de normales

    essaies de faire en sorte de pouvoir les dessiner ainsi que de pouvoir dessiner le spot dans l'espace, ca pourrai aider
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    tu as bien activé la lumière avec :
    glEnable(GL_LIGHTING)
    et
    glEnable(GL_LIGHTx) avec x le numéro de la lumière
    Tout à fait .

    Ah, je dois subdiviser tout ça, ne savais pas.

    VOila, les normales en blanc, qui viennent vers nous, et le trait bordeau va vers le tableau (vers son centre), c'est la lumière.


  16. #16
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    à mon avis, ta lumière n'éclaire aucune vertex du tableau, juste le centre

    comme la couleur dépend de l'éclairage de tes vertex, le tableau est sombre

    tu devrais essayer d'éclairer un coin du tableau pour voir si déjà ca fait quelque chose
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Je viens de tester dans un coin, ça ne fait rien. J'ai aussi tenté de mettre une gluSphere devant, elle n'est pas éclairée !

    Je commence à désespérer :S


  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Je viens d'ajouter une composante ambiante à ma lumière (j'ai les 3 composantes à 1,1,1 maintenant). Et la, ça change pas mal !

    Voila, lorsque une lumière omnidirectionnelle est allumée, le spot éteind :

    Lorsque la lumière omnidirectionnelle est éteinte, spot éteind :

    Lorsque la lumière omnidirectionnelle est éteinte, spot allumé :



    Sur les 2 précédentes screen, on peut voir que l'éclairage "tourne" :S

    Mon code pour les lumières :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        glLightfv(GL_LIGHT2+i, GL_AMBIENT, ambient_spots);
        glLightfv(GL_LIGHT2+i, GL_DIFFUSE, diffuse_spots);
        glLightfv(GL_LIGHT2+i, GL_SPECULAR, specular_spots);
        glLightfv(GL_LIGHT2+i, GL_POSITION, position_spots);
        glLightf(GL_LIGHT2+i, GL_SPOT_CUTOFF, 30.0); // angle
        glLightfv(GL_LIGHT2+i, GL_SPOT_DIRECTION, direction_spots);
        glLighti(GL_LIGHT2+i, GL_SPOT_EXPONENT, 10); // atténuation
        glLightf(GL_LIGHT2+i, GL_CONSTANT_ATTENUATION, 0);
        glLightf(GL_LIGHT2+i, GL_LINEAR_ATTENUATION, 0);
        glLightf(GL_LIGHT2+i, GL_QUADRATIC_ATTENUATION, 0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    GLfloat ambient_spots[] = { 1.0 , 1.0 , 1.0 , 1.0 };
    GLfloat diffuse_spots[] = { 1.0 , 1.0 , 1.0 , 1.0 };
    GLfloat specular_spots[] = { 1.0 , 1.0 , 1.0 , 1.0 };
    GLfloat direction_spots[] = { 0.0 , 0.0 , -1.0};

  19. #19
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Je pense que cela vient de l'environnement ou ton spot est placé et pas du setting de la lumière... à vérifier

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Par défaut
    Je ne vois vraiment pas, en tous cas, merci de m'avoir aider.

Discussions similaires

  1. [Debutant] Erreur bizarre AbstractMethodError
    Par Cazman dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 23/04/2007, 10h13
  2. Réponses: 5
    Dernier message: 31/08/2006, 20h39
  3. Réponses: 2
    Dernier message: 17/11/2005, 13h01
  4. [Débutant][Math] float int arondi bizarre
    Par yolepro dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 27/04/2004, 10h01
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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