2016-05-15 8 views
3

私の目標は、マウスのスクロールにズーム機能を実装することです。 これまではglViewportを使ってズーム効果を実装しましたが、これはかなりうまく動作します。もちろん、画像は滑らかではありません。ぎこちないピクセルを示します。OpenGLスムーズズーム

ズーム後に画像をよりスムーズにするために、今すぐ試してみたいと思います。 私は既に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コンテキストにバインドされているもののテクスチャ変更です。それらを呼び出す前に、変更したいパラメータのテクスチャをバインドする必要があります。