OpenGL 超级采样抗锯齿?

2024-04-20

在办公室,我们正在使用旧的 GLX/Motif 软件,该软件使用 OpenGL 的 AccumulationBuffer 来实现保存图像的抗锯齿功能。 我们的问题是Apple从其所有驱动程序中删除了AccumulationBuffer(从OS X 10.7.5开始),并且一些Linux驱动程序(例如Intel HDxxxx)也不支持它。

然后我想更新该软件的抗锯齿代码,使其与大多数实际操作系统和 GPU 兼容,但保持生成的图像像以前一样漂亮(因为我们需要它们来发表科学出版物)。

SuperSampling 似乎是最古老、质量最好的抗锯齿方法,但我找不到任何不使用 AccumulationBuffer 的 SSAA 示例。有没有不同的方法来使用 OpenGL/GLX 实现 SuperSampling???


您可以使用 FBO 来实现与累积缓冲区最有可能使用的相同类型的抗锯齿功能。该过程几乎相同,只是您使用纹理/渲染缓冲区作为“累积缓冲区”。您可以使用两个 FBO 进行该过程,也可以更改单个渲染 FBO 的附加渲染目标。

在伪代码中,使用两个 FBO,流程大致如下:

create renderbuffer rbA
create fboA (will be used for accumulation)
bind fboA
attach rbA to fboA
clear

create texture texB
create fboB (will be used for rendering)
attach texB to fboB
(create and attach a renderbuffer for the depth buffer)

loop over jitter offsets
    bind fboB
    clear
    render scene, with jitter offset applied

    bind fboA
    bind texB for texturing
    set blend function GL_CONSTANT_ALPHA, GL_ONE
    set blend color 0.0, 0.0, 0.0, 1.0 / #passes
    enable blending
    render screen size quad with simple texture sampling shader
    disable blending
end loop

bind fboA as read_framebuffer
bind default framebuffer as draw framebuffer
blit framebuffer

完全超级采样也是可能的。正如上面评论中的 Andon 所建议的那样,您创建一个 FBO,其渲染目标是每个维度中窗口大小的倍数,最后对窗口进行缩小规模的位块传送。整个过程往往很慢并且使用大量内存,即使只有 2 倍。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL 超级采样抗锯齿? 的相关文章

  • glBufferSubData什么时候返回? [复制]

    这个问题在这里已经有答案了 我想将一个非常大的内存块的内容传输到足够大的 GPU 缓冲区 然后立即更改 CPU 上的内存内容 伪代码是这样的 glBindBuffer very large buffer glBufferSubData ve
  • Qt:QOpenGLWidget 中的文本渲染

    我想在 QOpenGLWidget 上绘制文本标签 我尝试使用 QPainter 来完成此任务 但没有成功 文本看起来很难看并且没有抗锯齿 它在 Qt OpenGL 2dpainting 示例中看起来也很难看 然而 在也使用 OpenGL
  • 构建人脸图像的线框模型[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想编写一个程序来构建面部图像的线框
  • 包含原始数据的头文件的用途是什么?

    决定检查一些除了我自己的代码之外的代码 Quake I https github com id Software Quake就是选择 我点击的第一个文件只包含原始数据 唯一的注释是 GP L 我猜它是一个包含法向量的数组 不管它的目的是什么
  • 如何使用鼠标改变OpenGL相机

    我正在尝试在 OpenGL 中设置一个相机来查看 3 维中的一些点 为了实现这一点 我不想使用旧的 固定的功能样式 glMatrixMode glTranslate 等 而是自己设置模型视图投影矩阵并在我的顶点着色器中使用它 正交投影就足够
  • 更新到 MacOs Mojave 10.14 后是否有 OpenGL 黑屏和伽玛校正?

    我不小心更新了我的 Mac OpenGL 现在在最新的 MacOS Mojave 中已被弃用 我正在使用 OpenGL GLUT 我知道这很旧 但我只需要一个简单的程序 并在终端上运行 不使用 Xcode 使用在 Sierra 中完美运行的
  • 当我在 xcode 项目中使用 #include 行时,它在哪里查找 gl.h 文件?

    我正在将 Linux 的开源 C 程序移植到 os x 我一直在改变线路 include
  • glDeleteShader - 顺序无关吗?

    在 OpenGL 中 顺序为glAttachShader无关紧要 这是否相同glDeleteShader 如果正在进行一些动态内存分配 我会说是的 但也许在 opengl 上下文中处理方式不同 简单的答案是 没关系 您可以在将它们附加到程序
  • 设置 GLEW 窗口?

    我有 Visual Studio 2010 我想在其上设置 glew h 我执行了这一步 但仍然出现链接器错误 1 下载glew包 2 将 h文件复制到C Program Files x86 Microsoft SDKs Windows v
  • OpenGL alpha 测试 - 如何替换已弃用的 AlphaFunc?

    我正在尝试用 Alpha 绘制球体 但我的 Z 缓冲区有问题 有些像素是透明的 但会写入 Zbuffer 因此后面的不透明像素会被隐藏 这是我的设置 gl Enable gl DEPTH TEST gl DepthFunc gl LEQUA
  • 如何用SDL2和OpenGL画三角形?

    我正在使用 C 中的 SDL2 和 OpenGL 开发一个简单的应用程序 问题是我的程序没有绘制三角形 Rect hpp 绘制三角形的类 ifndef Rect hpp define Rect hpp include
  • glDrawElements 在 PyOpenGL 中绘制立方体

    我最近开始通过 Python 学习 OpenGL 这要归功于几个教程 尤其是 Nicolas P Rougier 的教程 http www labri fr perso nrougier teaching opengl http www l
  • 将glm四元数转换为旋转矩阵并与opengl一起使用

    所以我将对象的方向存储在 glm fquat 中 我想用它来旋转我的模型 我怎么做 我试过这个 glPushMatrix glTranslatef position x position y position z glMultMatrixf
  • 对 VBO 中的特定三角形使用不同的纹理

    我有 9 个由三角形组成的四边形 如下所示 我在用着VBO存储有关它们的数据 它们的位置和纹理坐标 我的问题是 是否可以仅使用一个来使四边形 5 具有与其余四边形不同的纹理VBO and shader 绿色代表纹理 1 黄色代表纹理 2 到
  • 没有着色器的 OpenGL

    我已经阅读了一些教程来编写以下代码 唯一的区别是原始教程使用 SDL 而不是 GLEW 我不明白这段代码有什么问题 它可以编译 但我没有看到三角形 教程也没有使用着色器 include
  • 如何用opengl制作2D地形?

    我想制作一个简单的二维地形 只有一些颠簸和高度变化 我想过只使用随机数来描述某个顶点的高度 但我不知道如何从中制作一个网格 我正在寻找一种方法来查找地形的顶点和索引缓冲区 我该怎么做呢 您可以仅将 GL POLYGON 与所有顶点的列表一起
  • CPU 到 GPU 法线映射

    我正在创建一个地形网格 然后这个答案 https stackoverflow com a 5284527 1356106我正在尝试将 CPU 计算法线迁移到基于着色器的版本 以便通过降低网格分辨率并使用在片段着色器中计算的法线贴图来提高性能
  • 在 OpenGL 中,为什么 glVertexAttribPointer 要求“指针”参数以 void* 形式传入?

    规格为glVertexAttribPointer如下 void glVertexAttribPointer GLuint index GLint size GLenum type GLboolean normalized GLsizei s
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • gluPerspective 与 gluOrtho2D

    我查看了 MSDN 上关于这两个函数的文档 但是 我不太明白这两个功能之间的区别 一个是用于设置 3D 相机视图 另一个是用于设置 2D 相机视图 如果能得到解答就太好了 预先感谢您的评论 正交投影基本上是没有透视的 3D 投影 本质上 这

随机推荐