OpenGL 抗锯齿与 glAccum 和 glRasterPos

Posted

技术标签:

【中文标题】OpenGL 抗锯齿与 glAccum 和 glRasterPos【英文标题】:OpenGL antialiasing with glAccum and glRasterPos 【发布时间】:2017-04-09 04:33:59 【问题描述】:

我的任务:在 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 有什么我不明白的地方?

【问题讨论】:

Please don't use the accumulation buffer, it's old and not worth it anymore.如果你想要抗锯齿then use multisampling, which can be enabled with a single function call in GLFW. @Vallentin 谢谢你的回答,但我别无选择,这是有具体要求的具体作业。我看到了这个链接,用户移动相机,但我需要用 glRasterPos 函数移动我的图像,我不明白我应该怎么做 @wzpcm:作业?天哪,您的课程材料肯定已经 20 年没有更新了,当然。如今,您将很难找到真正支持累积缓冲区的系统。事实上,消费级硬件完全支持累加缓冲区从不。如果您真的想走这条路(使用抖动的投影矩阵进行多次渲染),那么在当今时代,您将不得不使用帧缓冲区对象而不是累加缓冲区。 【参考方案1】:

调用glRasterPos 不会移动任何东西,它只是设置当前位置 - 将其视为为内部posxposy 变量赋值。您应该再次绘制您的图像(调用glDrawPixels)以查看此调用的效果。

【讨论】:

以上是关于OpenGL 抗锯齿与 glAccum 和 glRasterPos的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL4 多重采样抗锯齿和渲染到纹理

OpenGL 抗锯齿不起作用

openGL线型和线宽以及线的抗锯齿

我的OpenGL学习进阶之旅收集到的关于如何在OpenGL ES上使用MSAA(Multisample Anti-aliasing)实现抗锯齿效果的资料和源码

OpenGL核心技术之抗锯齿

OpenGL核心技术之抗锯齿