OpenGL平滑缩放

3
我的目标是在鼠标滚动时实现缩放功能。 到目前为止,我已经使用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
但是与GL_NEAREST相比,它并没有显示出任何差异。- 那么它就没有被正确设置。 - Rotem
1个回答

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接