1

有没有办法从渲染的 3D 场景中提取点云(使用 OPENGL)?

详细地:

输入应该是渲染的 3D 场景。

输出应该是例如具有顶点(x,y,z) 的三维数组。

任务可能还是不可能?

4

3 回答 3

2
  • 使用正交视图渲染您的场景,以便所有场景一次都适合屏幕。
  • 使用 g 缓冲区(搜索此术语或“胖像素”或“延迟渲染”)在帧缓冲区中的每个采样点捕获(X、Y、Z、R、G、B、A)。
  • 回读您的帧缓冲区并将 (X,Y,Z,R,G,B,A) 元组放在线性数组中的每个样本点。

现在,您已经使用 OpenGL 从传统几何体中采样了点云。除了从 GPU 回读到主机之外,这将非常快。

更进一步:

  • 使用深度剥离(搜索该术语)在离相机不最近的表面上生成样本。
  • 从多个视点重复渲染(或等效于场景的多个旋转),以确保从场景的角落和缝隙中捕获片段,并将每次传递生成的点附加到一个大的线性阵列中。
于 2012-04-11T22:37:29.490 回答
1

如果我理解正确,您想解构 3D 场景的最终渲染 (2D)。通常,OpenGL 没有内置的功能可以做到这一点。

然而,有许多论文描述了分析 2D 图像以生成 3D 表示的方法。例如,Microsoft Kinect 在某种程度上就是这样做的。查看以前版本的 SIGGRAPH 中介绍的论文作为起点。许多实现可能使用 GPU(OpenGL、DirectX、CUDA 等)来发挥它们的魔力,但仅此而已。例如,用于识别对象可见边缘的边缘检测过滤器和直方图函数可以在 GPU 上运行。

根据您的应用程序领域,您可能会遇到几乎不可能的事情,或者可能有一个快捷方式可以用来识别形状和顶点。

编辑

我认为您可能对 OpenGL 渲染的工作原理存在误解。该应用程序生成并发送到 OpenGL 三角形的顶点形成多边形和 3d 对象。然后,OpenGL 将这些对象光栅化(即转换为像素),以从具有特定视场的特定视点形成 3d 场景的 2d 渲染。当您说要检索顶点的“点云”时,很难理解您想要什么,因为您首先负责生成这些顶点!

于 2011-11-16T17:54:20.923 回答
1

我认为您应该获取输入数据并手动将其乘以转换和模型视图矩阵。无需为此使用 OpenGL,只需一些向量/矩阵数学。

于 2011-11-17T17:46:22.277 回答