//////////////////////////////////////////////////////////////////////// /// /// @fn void ProjectionOrtho::zoomerInElastique(const glm::ivec2& coin1, const glm::ivec2& coin2) /// /// Permet de faire un zoom in élastique. /// /// @param[in] coin1 : Coin contenant les coordonnées du premier coin du /// rectangle. /// @param[in] coin2 : Coin contenant les coordonnées du second coin du /// rectangle. /// /// @return Aucune. /// //////////////////////////////////////////////////////////////////////// void ProjectionOrtho::zoomIn(const glm::ivec2& coin1, const glm::ivec2& coin2) { centrerSurPoint({ (xMax_ - xMin_) / 2, (yMax_ - yMin_) / 2 }); double zfacteur = zArriere_ / zAvant_; double facteurX; double facteurY; if (coin2.x > coin1.x) { facteurX = (largeurCloture_ / 2) / (coin2.x - coin1.x)*zfacteur; } else if (coin2.x < coin1.x) { facteurX = (largeurCloture_ / 2) / (coin1.x - coin2.x)*zfacteur; } else { facteurX = largeurCloture_; } if (coin2.y > coin1.y) { facteurY = (hauteurCloture_ / 2) / (coin2.y - coin1.y)*zfacteur; } else if (coin2.y < coin1.y) { facteurY = (hauteurCloture_ / 2) / (coin1.y - coin2.y)*zfacteur; } else { facteurY = hauteurCloture_; } double variation = zoomOutMax_ - ((facteurX + facteurY) / 2 * incrementZoom_ + zfacteur); if (variation >= (facteurX + facteurY) / 2 * incrementZoom_) { xMax_ *= zfacteur; xMin_ *= zfacteur; yMax_ *= zfacteur; yMin_ *= zfacteur; largeurFenetre_ *= zfacteur; hauteurFenetre_ *= zfacteur; zfacteur = zfacteur + (facteurX + facteurY) / 2 * incrementZoom_; xMax_ /= zfacteur; xMin_ /= zfacteur; yMax_ /= zfacteur; yMin_ /= zfacteur; largeurFenetre_ /= zfacteur; hauteurFenetre_ /= zfacteur; } appliquer(); }
//////////////////////////////////////////////////////////////////////// /// /// @fn void Projection::mettreAJourProjection() const /// /// Spécifie la matrice de projection dans la machine à états d'OpenGL. /// /// @return Aucune. /// //////////////////////////////////////////////////////////////////////// void Projection::mettreAJourProjection() const { // Sauvegarde du mode courant de matrice. GLint mode; glGetIntegerv(GL_MATRIX_MODE, &mode); glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Application de la projection. appliquer(); glMatrixMode(mode); }