Exemplo n.º 1
0
	////////////////////////////////////////////////////////////////////////
	///
	/// @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();
		

	}
Exemplo n.º 2
0
   ////////////////////////////////////////////////////////////////////////
   ///
   /// @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);
   }