2016-05-15 68 views
3

我的目標是在滾動鼠標時實現縮放功能。 到目前爲止,我使用glViewport實現了縮放效果,效果很好。但是當然,圖像並不是非常平滑,它顯示出前衛的像素。OpenGL Smooth Zooming

我想現在嘗試使圖像在放大後更平滑。 我已經嘗試過使用glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); (和MIN_FILTER),但它與GL_NEAREST相比沒有任何區別。

你們有沒有關於如何使縮放後的圖像看起來更流暢的好主意?例如,採用像素矩陣並通過使用像2xSal這樣的標量算法來手動計算像素可能是一個好主意嗎?

到目前爲止,我的代碼是

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

*但與GL_NEAREST相比,它沒有顯示任何差異。* - 然後它沒有被正確設置。 – Rotem

回答

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); 

這些功能修改任何紋理當前綁定到他們被稱爲當時的OpenGL上下文。在調用它們之前,你必須先綁定你想改變參數的紋理。