OpenGL Smooth Zooming

OpenGL Smooth Zooming

问题描述:

我的目标是在滚动鼠标时实现缩放功能。 到目前为止,我使用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

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上下文。在调用它们之前,你必须先绑定你想改变参数的纹理。