2017-04-09 71 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)以查看此调用的效果。