OpenGL平滑缩放

时间:2016-05-15 10:00:45

标签: c++ opengl zooming smoothing

我的目标是在滚动鼠标时实现缩放功能。 到目前为止,我使用glViewport实现了缩放效果,效果非常好。但当然图像不是很平滑,它显示出前卫的像素。

我想现在尝试在缩放后使图像更加平滑。 我已经尝试过使用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 个答案:

答案 0 :(得分: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上下文的任何纹理。在调用它们之前,必须首先绑定要更改的参数纹理。