c++ - 可以使用 OpenGL 将实值三角形绘制到缓冲区中吗?

标签 c++ opengl gpu

我需要实现图像重建,其中涉及在表示图像像素的缓冲区中绘制三角形。这些三角形被分配了一些要填充的浮点值。如果绘制的三角形重叠,则重叠区域的值必须加在一起。

是否可以使用 OpenGL 来实现?我想利用这样一个事实,即光栅化三角形是一项可以在显卡上加速的基本图形任务。我已经有了这个算法的 cpu-only 实现,但它对我的目的来说不够快。这是由于需要绘制大量的三角形。

具体来说我的问题是:

  1. 我可以使用 openGL 绘制具有实数值的三角形吗? (或者我可以想出一个使用颜色等的技巧吗?)
  2. OpenGL 可以添加三角形重叠的值吗? (再一次,我可以处理 hack,比如颜色混合)
  3. 我能否将像素的实际值恢复为 float 组或类似数组以进行进一步处理?
  4. 我是否对在 OpenGL 中绘图 -> 使用 GPU 绘图 -> 可能执行速度更快的想法有误解?

此外,据我所知,我想在虚拟机上运行此代码,因此加速使用 OpenGL 比在 Cuda 之类的东西中滚动我自己的实现更可行。这是真的吗?

编辑:累积缓冲区是这里的一个选项吗?

最佳答案

  1. 如果 32 位 float 就足够了,那么答案似乎是肯定的:http://www.opengl.org/wiki/Image_Format#Required_formats
  2. 即使在旧的固定管道下,您也可以使用函数 GL_FUNC_ADD 的混合模式,尽管我确信片段着色器现在可以更轻松地做到这一点。
  3. glReadPixels() 将在绘制后将数据从缓冲区中取出。
  4. 有 OpenGL 的软件实现,但您可以在设置上下文时进行选择。使用 GPU 应该比 CPU 快得多。
  5. 不知道。我从未在 VM 上使用过 OpenGL 或 CUDA。我从来没有用过 CUDA。

关于c++ - 可以使用 OpenGL 将实值三角形绘制到缓冲区中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918451/

相关文章:

c# - 在 C# 中创建非托管 C++ 对象

opengl - 如何处理离散光线追踪的错误索引计算?

c++ - Flann vs. Brute Force 匹配器

c++ - 存储指针 vector 的最佳 C++11 方法

c++ - 如何确定计算机上安装的物理 RAM? ( Windows )

c++ - 着色器限制

c++ - 我的 OpenGL 程序的着色器不会影响几何图形或多边形的颜色

graphics - 将缓冲区绑定(bind)到虚幻引擎 4 自定义计算着色器

python - 为什么floatX的标志会影响Theano中是否使用GPU?

c++ - 为什么我不能在 friend 类中实例化一个构造函数是私有(private)的类?