2017-04-09 74 views
0

我的任務:在OpenGL中用累加緩衝區製作加權抗鋸齒算法。換句話說,我有像素陣列,我必須用乘法器在所有方向上移動一個像素。帶glAccum和glRasterPos的OpenGL反鋸齒

我的問題:我真的不明白我的代碼是幹什麼的。

while(!glfwWindowShouldClose(window)) { 
    glReadBuffer(GL_FRONT); 
    glDrawBuffer(GL_FRONT); 
    glDrawPixels(800, 800, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 

    glAccum(GL_LOAD, 1.0); 
    glRasterPos2d(1.0, 0.0); 
    glAccum(GL_ACCUM, 2.0); 
    glRasterPos2d(0.0, 1.0); 
    glAccum(GL_ACCUM, 2.0); 
    glAccum(GL_RETURN, 1.0); 

    glfwPollEvents(); 
    glfwSwapBuffers(window); 
} 

據我瞭解,glRasterPos改變「光標」的位置,所以用它改變我的 圖片應該轉移到一個像素向右和向下。但我沒有看到任何抗鋸齒結果,只是閃爍我的形狀(像素數組只包含白色像素)。我知道我應該對所有九個方向執行GL_ACCUM。我應該使用glRasterPos。 我對glAccum和glRasterPos有什麼不瞭解?

+6

[請不要使用累積緩衝區,它是舊的,不值得它了](http://stackoverflow.com/questions/10508872/opengl-antialiasing-without-the-accumulation-buffer)如果你想消除鋸齒[然後使用多重採樣,它可以使用GLFW中的單個函數調用啓用。](http://stackoverflow.com/a/42858872/2470818) – Vallentin

+0

@Vallentin謝謝你的回答,但我沒有選擇,它是具體需求的具體作業。我看到這個鏈接,用戶移動相機,但我需要移動我的圖像與glRasterPos功能,我不明白我該怎麼做這個 – wzpcm

+0

@wzpcm:作業?好主,你的課程材料肯定沒有在20年內更新過。這些日子你會很難找到真正支持積累緩衝的系統;實際上,累加緩衝區**從不**完全由消費者硬件支持。如果你真的想走這條路(用抖動投影矩陣渲染幾次),那麼在今天和這個年代,你將不得不使用幀緩衝區對象而不是累積緩衝區。 – datenwolf

回答

0

調用glRasterPos不會移動任何東西,它只是設置當前位置 - 將其視爲將值分配給內部posxposy變量。您應該再次繪製圖像(請致電glDrawPixels)以查看此調用的效果。