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
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    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