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 :

Mettre la scène au centre de l’écran


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 32
    Par défaut Mettre la scène au centre de l’écran
    Bonjour à tous,

    J'ai une scène qui a une frontière : maxX, maxY, minX, minY, maxZ (peu être = 0), minZ (peu être = 0), la taille de l’écran est : screenWidth, screenHeight. Le point (0, 0) est en centre de l’écran.
    - Je voudrais mettre cette scène au centre de l’écran.
    - Zoom in et zoom out cette scène mais la scène est toujours au centre de l’écran. Si la taille de la scène est trop large, il sera être coupé.

    Comment je faire ça ?
    Merci à tous,

  2. #2
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Par défaut
    Salut
    ben une des possibilité est de trouver le centre de la scene
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cX = (maxX-minX)/2
    cY = (maxY-minY)/2
    cZ = (maxZ-minZ)/2
    et puis translater toute la scene d'un vecteur (-cX,-cY,-cZ)
    Comme ca le centre de la scene sera au meme endroit que le centre de coordonnees.
    ou si non tu fais un gluLookAt avec le centre cX,cY,cZ

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 32
    Par défaut
    Citation Envoyé par goast Voir le message
    Salut
    ben une des possibilité est de trouver le centre de la scene
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cX = (maxX-minX)/2
    cY = (maxY-minY)/2
    cZ = (maxZ-minZ)/2
    et puis translater toute la scene d'un vecteur (-cX,-cY,-cZ)
    Comme ca le centre de la scene sera au meme endroit que le centre de coordonnees.
    ou si non tu fais un gluLookAt avec le centre cX,cY,cZ
    Yeah, mais si je fait un zoom : glScalef(m_scale, m_scale, m_scale);, la position de la scène est changé . Comment je peux re-mettre au centre ?
    Est-ce que je dois multiplier maxX, minX, maxY, minY, maxZ, minZ avec m_scale et re-calculer le centre ?

    Merci,

  4. #4
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 162
    Par défaut
    il suffit de multiplier les cX, cY, cZ par m_scale pour avoir le nouveau centre.
    Donc normallement si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glPushMatrix();
    glScalef(m_scale,m_scale,m_scale);
    glTranslatef(-cX, -cY, -cZ);
    draw();//ici tu affiche la scene
    glPopMatrix();
    ca devrais etre bon
    mais le glScalef doit etre avant le translate

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 32
    Par défaut
    Citation Envoyé par goast Voir le message
    il suffit de multiplier les cX, cY, cZ par m_scale pour avoir le nouveau centre.
    Donc normallement si tu fais

    glPushMatrix();
    glScalef(m_scale,m_scale,m_scale);
    glTranslatef(-cX, -cY, -cZ);
    draw();//ici tu affiche la scene
    glPopMatrix();

    ca devrais etre bon
    mais le glScalef doit etre avant le translate
    Pourrais-tu m'indiquer où se trouve l'erreur dans ce code ? Je ne vois rien sur l'écran.

    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
    void Viewer::draw(){
    	glPushMatrix();
    	glClearColor(0.f,0.f,0.1f,1.f);
    	glDisable(GL_DEPTH_TEST);
    	glMatrixMode(GL_PROJECTION);
        glFrustumf(Loader->minX, Loader->maxX, Loader->minY, Loader->maxY, 3.f, 5000.f);
        //glFrustumf(657, 1155, -781, -442, 1.2f, 1500.f);
        glMatrixMode(GL_MODELVIEW);
        glShadeModel(GL_SMOOTH);
     
    	glClear(GL_COLOR_BUFFER_BIT);
    	glLoadIdentity();
    	float centerX = (Loader->minX + Loader->maxX)/2;
    	float centerY = (Loader->minY + Loader->maxY)/2;
    	float centerZ = 0;
    	glScalef(m_scale, m_scale, m_scale);
    	glTranslatef(centerX, centerY, centerZ);
    //glTranslatef(-1400.f, 1000.f, -3.f);
    	//glTranslatef(906.0f, -611.5f, -7.f);
    	//glScalef(2.0, 2.0, 2.0);
     
     
    	glColor4f(0, 1, 0, 1);
     
    	drawScene();
    	glPopMatrix();
    }

  6. #6
    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 pense que ton erreur est là :
    je ne sait pas à quoi ressemble ton modèle, mais si tu as le nez collé dessus tu risque de pas voir grand 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.

Discussions similaires

  1. [XL-2010] Code pour mettre en gras le centre d'un en entete de page
    Par jacfld49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/12/2012, 04h40
  2. Mettre un élement au centre d'une Frame
    Par basile238 dans le forum wxPython
    Réponses: 6
    Dernier message: 23/01/2009, 14h36
  3. mettre un formulaire au centre d'une page web
    Par fattouch_squall dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 02/12/2007, 10h37
  4. Mettre une image à Gauche et à droite sans déformer le formulaire du centre
    Par Darbon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 21
    Dernier message: 07/10/2006, 12h54
  5. Comment mettre l'arriere plan au centre
    Par Conficius dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 05/10/2005, 00h18

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