【问题标题】:SVO Rendering: OpenGL or Custom renderer?SVO 渲染:OpenGL 还是自定义渲染器?
【发布时间】:2012-08-25 19:59:55
【问题描述】:

我正计划创建一个 Sparce Voxel Octree (SVO) 引擎,并且在使用 openGL 渲染每个小立方体或在汇编和 c 中编写我自己的渲染器之间陷入困境。如果我要做后者,我不确定如何在屏幕上绘制像素(我在 Mac 上,10.8)。哪种图形上下文/窗口系统将是首选方法(不是 X,我在我的 Mac 上遇到了 X 的问题)。

附:引擎需要能够绘制至少 50.000 个立方体(我将使用 opencl/cuda 来帮助并行处理立方体)。我只是想知道通过专门设计的渲染器进行绘制是否更有效。

【问题讨论】:

  • 如果你不想使用 CGL,那么 AGL(Apple Graphics Library) 或 Cocoa(API) appkit 是你的选择。
  • @ocluser 我知道我可以使用哪些 OpenGL 库 我想知道我可以使用哪些窗口系统或我可以在屏幕上绘制的其他方式。

标签: opengl cuda opencl render voxel


【解决方案1】:

API

OpenGL 是(在一定程度上)最便携的渲染 API,您至少有机会跟上当前的图形硬件功能,尽管这也经常会造成相当多的挫败感。如果您为 PC 编写代码,您可以使用 DirectX10/11,它提供或多或少相同的功能。 DirectX 的驱动程序开销要少一些,而 OpenGL 是一个状态机,对程序员隐藏了很多东西。我不确定你是如何看待在汇编器中做同样的事情而减少挫折感的,除非你所说的“asm”是指编写 glsl 或 hlsl 着色器:)

Svo

我编写了一个 OpenGL SVO 可视化器,目前在 GTX780 上以 30 fps 的速度渲染 62.000 个体素立方体,尽管我的设置不是最佳的,即它尚未使用实例渲染或三条或四边形,或基于几何着色器的方法,其中您只需发送框的中心坐标并完全在着色器中生成视觉效果。 OpenGL 确实提供了一整套优化渲染的方法,并且它是硬件加速的。

互操作

openGL 和 openCL 之间的互操作是微不足道的,而且 CUDA 也很好地与 openGL 缓冲区集成。我让这两种设置都在同一个代码库中工作。第三种选择是使用计算着色器(opengl 4.3+),因此您甚至不需要 openCL 或 CUDA 来处理您的多维数据集。

您是否打算通过 svo 发送光线,或者只是将轮廓背面剔除,或者做一些额外的事情?

【讨论】:

  • 为了好玩,我使用了实例化渲染。相同的场景现在以 56fps 渲染;即:每个实例都有唯一的 mvp 和颜色属性。
  • 更多优化(着色器、不推荐使用的 opengl 函数、框架、虚拟等)将其提升到了惊人的 80fps。仍然是一个动态场景,每个 mvp 更新每一帧!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2017-11-24
  • 2013-09-25
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
相关资源
最近更新 更多