2016-05-15 3 views
3

Mon but est d'implémenter une fonction de zoom sur le défilement de la souris. Jusqu'à présent, j'ai implémenté l'effet de zoom en utilisant glViewport, qui fonctionne très bien. Mais bien sûr l'image n'est pas vraiment lisse, elle montre des pixels énervés.OpenGL Smooth Zooming

Je veux essayer maintenant de rendre l'image plus lisse après le zoom. J'ai déjà essayé d'utiliser le glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); (et MIN_FILTER), mais il ne montre aucune différence par rapport au GL_NEAREST.

Avez-vous de bonnes idées sur la façon de rendre l'image agrandie plus lisse? Est-ce peut-être une bonne idée de prendre la matrice de pixels et de calculer les pixels manuellement en utilisant un algorithme scalaire comme 2xSal par exemple?

jusqu'à présent, mon code est

void zoom(double scale) { 
    GLint m_viewport[4]; 

    glGetIntegerv(GL_VIEWPORT, m_viewport); 

    if (scale > 0) { 

     glViewport(m_viewport[0] - (m_viewport[2]/2), m_viewport[1] - (m_viewport[3]/2), m_viewport[2] * 2, m_viewport[3] * 2); 
    } 
    else { 
     glViewport(m_viewport[0] + (m_viewport[2]/4), m_viewport[1] + (m_viewport[3]/4), m_viewport[2]/2, m_viewport[3]/2); 
    } 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
+1

* mais il ne montre aucune différence par rapport à GL_NEAREST. * - alors il n'est pas réglé correctement. – Rotem

Répondre

3
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 

Ces fonctions modifient la texture tout est actuellement lié au contexte OpenGL au moment où ils sont appelés. Avant de les appeler, vous devez d'abord lier la texture dont vous voulez modifier les paramètres.