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

MFC Discussion :

[MFC + OpenGL] Affichage d'une image dans une scène OpenGL


Sujet :

MFC

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 7
    Points
    7
    Par défaut [MFC + OpenGL] Affichage d'une image dans une scène OpenGL
    Bonjour.
    Je dispose d'une application contenant deux splitters: un horizontal et un vertical séparant la partie du haut en 2.

    Dans la CView située en haut à droite, je crée un scène OpenGL dans laquelle je charge une image TGA en tant que texture pour l'afficher.
    L'affichage est là, mais l'image est complètement déformée.

    Le plus étrange, c'est qu'une de mes autres applications réalise la même opération, mais sans les splitters. Et là, l'affichage est correct.

    Dans les deux applications, j'ai créé une fonction de calcul des coefficients d'affichage de ma scène OpenGL:

    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
     
    //Calcul des coefficients de hauteur et de largeur
    //pour afficher l'image aux bonnes proportions dans la fenêtre
    //Si la largeur de l'image est strictement supérieure à sa longueur
    if( largeurText>hauteurText )
    {
        if( largeurText>ZoneClient.right )
        {
            //Si la hauteur de l'image, recalculée avec la ratio
            //'Largeur de l'image/Largeur de la zone client' est
            //inférieure à la hauteur de la zone client
            if(     hauteurText/((float)largeurText/ZoneClient.right)<ZoneClient.bottom )
            {	coeffLargeur = 0;       coeffHauteur=1-(hauteurText/((float)largeurText/ZoneClient.right))/ZoneClient.bottom;		}
            else
            {	coeffLargeur = 1-(largeurText/((float)hauteurText/ZoneClient.bottom))/ZoneClient.right;
                     coeffHauteur = 0;	}
            }
            else
            {
                 //Si l'image a ses dimensions inférieures
                 //ou égales à celle de la zone client
                 if( hauteurText<=ZoneClient.bottom )
                 {
                      coeffLargeur = 1-(float)largeurText/ZoneClient.right;
                      coeffHauteur = 1-(float)hauteurText/ZoneClient.bottom;
                 }
                 //Si seule la hauteur de l'image est
                 //supérieure à celle de la zone client
                 else
                 {
                       coeffLargeur = 1-(largeurText/((float)hauteurText/ZoneClient.bottom))/ZoneClient.right;
                       coeffHauteur = 0;
                  }
            }
    }
    //Sinon (si la hauteur de l'image est supérieure ou égale à sa longueur)
    else
    {
    	if( hauteurText>ZoneClient.bottom )
    	{
    		//Si la largeur de l'image, recalculée avec la ratio
    		//'Hauteur de l'image/Hauteur de la zone client' est
    		//inférieure à la largeur de la zone client
    		if( largeurText/((float)hauteurText/ZoneClient.bottom)<ZoneClient.right )
    		{	coeffLargeur = 1-(largeurText/((float)hauteurText/ZoneClient.bottom))/ZoneClient.right;
    			coeffHauteur = 0;	}
    		else
    		{	coeffLargeur = 0;
    			coeffHauteur =(hauteurText/((float)largeurText/ZoneClient.right))/ZoneClient.bottom;		                 }
    	}
    	else
    	{
                  //Si l'image a ses dimensions inférieures
                 //ou égales à celle de la zone client
                 if( largeurText<=ZoneClient.right )
                 {
                      coeffLargeur = 1-(float)largeurText/ZoneClient.right;
                      coeffHauteur = 1-(float)hauteurText/ZoneClient.bottom;
                  }
                  //Si seule la largeur de l'image est
                  //supérieure à celle de la zone client
                  else
                  {
                      coeffLargeur = 0;
                      coeffHauteur = (hauteurText/((float)largeurText/ZoneClient.right))/ZoneClient.bottom;
                   }
             }
    }
     
     
    		//Affichage de l'image
                    glPushMatrix();
                         glBegin(GL_QUADS);
                             glTexCoord2f(0.0, 1.0);
                             glVertex2f(-1.0+coeffLargeur, -1.0+coeffHauteur);
     
                             glTexCoord2f(0.0, 0.0);
                             glVertex2f(-1.0+coeffLargeur, 1.0-coeffHauteur);
     
                             glTexCoord2f(1.0, 0.0);
                             glVertex2f(1.0-coeffLargeur, 1.0-coeffHauteur);
     
                             glTexCoord2f(1.0, 1.0);
                             glVertex2f(1.0-coeffLargeur, -1.0+coeffHauteur);
                        glEnd();
                    glPopMatrix ();
                    SwapBuffers (hDC);
    Le plus bizarre est donc que l'affichage marche (l'image est aux bonne proportions) dans l'aplpication SDI sans splitters.
    Par contre il est incorect (image déformée) dans l'aplication SDI avec les splitters.

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Il faut déboguer pas à pas et inspecter les valeurs des variables ;
    il ya fort à parier que la zone cliente ne soit pas bonne
    Il est peut-être nécessaire d'appeler CView::OnPrepareDC , utiliser des fonctions de conversion comme CDC:PToLP ...

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. Réponses: 1
    Dernier message: 21/01/2011, 10h17
  3. Mettre une Image dans une Image
    Par shadowhocine dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/12/2006, 18h40
  4. Réponses: 3
    Dernier message: 30/10/2006, 11h21
  5. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 29/04/2006, 14h19

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