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 :

Afficher une matrice 3d avec OpenGl


Sujet :

OpenGL

  1. #1
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut Afficher une matrice 3d avec OpenGl
    Bonjour à tous,

    je developpe une application en imagerie médicale, à la fin du traitement j'enregistre une matrice 3d dans un fichier binaire. cette matrice ne contient que des 0 et 1. l'objectif que je cherche à atteindre est de pouvoir l'afficher dans un espace à 3 dimensions càd, les zéros (0) constituent l'espace (en noir) et les uns (1) l'objet à afficher, avec effets de lumière ou de matériaux.

    j'utilise trés bien le language c++, et je developpe sous c++builder de borland, et je suis un débutant en opengl .

    y'a t'il un solution à me proposer.

    merci de bien vouloir me répendre.
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu te doutes bien que nous n'allons pas de pondre le code tout cuit dans le bec. Qu'as-tu déjà essayé ? Sur quoi bloques-tu précisément ?

  3. #3
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    salut,

    premièrement j'ai essayer de calculer les dimension de l'object (les uns 1) contenus dans la matrice, ensuite j'ai initialiser le handle de la fenetre pour l'utilisation d'openl,
    2) je parcour la matrice dans les trois sens, à chaque fois que je trouve une valeur = 1 je dessine un point en rouge (par exp)
    3) j'ai utiliser les dim de l'objet déja calculer pour régler la prise de vue

    mais le résultat obtenu est trés mauvais .
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    mais le résultat obtenu est trés mauvais
    Tu peux préciser ce qui ne te satisfait pas exactement ? Quel résultat cela produit-il pour l'instant ?

  5. #5
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    après la visualisation de la matrice, quand je fais un zoom, je trouve des distorsion (décalage) entres les pxl. le code est :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    pour tout les pxl [x, y, z] de la matrice faire
      {
        si le pxl = 1 alors
           {
             glBegin(GL_POINTS);
                   glColor3f( 1.0, 0.0, 0.0 ); 
                   glVertex3d(x, y, z);
               glEnd();
           }
      }
    j'ai aussi essayer avec GL_LINES_STRIP et aussi avec GL_LINES, mais sa ne marche pas !!

    je souhaiterais ajouter un effet de lumière ou d'ombre, comment faire ??
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    après la visualisation de la matrice, quand je fais un zoom, je trouve des distorsion (décalage) entres les pxl
    C'est vraiment pas facile de se mettre dans ton appli. Tu n'aurais pas une capture d'écran, voire un programme executable afin qu'on puisse mieux se rendre compte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pour tout les pxl [x, y, z] de la matrice faire
      {
        si le pxl = 1 alors
           {
             glBegin(GL_POINTS);
                   glColor3f( 1.0, 0.0, 0.0 );
                   glVertex3d(x, y, z);
               glEnd();
           }
      }
    Petite optimisation : sort glBegin et glEnd de la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    glBegin(GL_POINTS);
    pour tout les pxl [x, y, z] de la matrice faire
      {
        si le pxl = 1 alors
           {
               glColor3f( 1.0, 0.0, 0.0 );
               glVertex3d(x, y, z);
           }
      }
    glEnd();

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Le pb de distorsion (décalage) entres les pixels est du au fait les points que tu affiches ont une taille fixe quelque soit la position de la camera. Donc quand la camera est éloignée tous les points sont proches les uns des autres (ils on même tendance à s'écraser) et au contraire quand la camera est proche de ta matrice les points sont très écartés lés uns des autres.

    Un remède à ce petit pb serait de faire varier la taille des points en fonction de la distance de la cam à la matrice en utilisant la fonction glPointSize().

    Mais le truc plus cool à faire serait de remplacer ces simples points par des sphères 3D générées par gluSphere(). Du coup, comme ce sont de vrais objets 3D, tu n'as plus besoin de gérer la distance avec la caméra et en plus tu peux les soumettres aux lumières et textures...

  8. #8
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Merci pour l'optimisation,

    aussi merci pour le truc, je vais l'essayer.

    a+
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    ou tu utilise des point mais avec l'extension GL_POINT_PARAMETER qui permet de gerer la distance de vue des point et est geré depuis... houla avant quake 2
    * 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

  10. #10
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    voilà un lien vers un site ou tu trouveras un bout de code qui permet d'afficher un cube : http://www.linuxgraphic.org/section3d/openGL/didact.html
    Afficher un cube et non un point te permettra d'avoir un rendu 3D de ta scène. Il te suffit d'adapter ce code à ton problème (soit l'affichage d'un multitude de cube).
    Si tu veux optimiser ton rendu, utilise un GlList.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/02/2014, 23h23
  2. Afficher une requete MYSQL avec jointure
    Par Higestromm dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/12/2005, 15h52
  3. [LG] Problème pour afficher une matrice
    Par phoebee dans le forum Langage
    Réponses: 4
    Dernier message: 11/08/2005, 21h41
  4. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59

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