【问题标题】:rendered 3D Scene to point cloud将 3D 场景渲染到点云
【发布时间】:2011-11-16 01:10:23
【问题描述】:

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

详细说明:

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

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

任务可能还是不可能?

【问题讨论】:

  • 什么是“渲染的 3D 场景”? OpenGL 只知道如何渲染,而不知道如何读取渲染。
  • 您需要澄清您的问题。您自己渲染这个 3D 场景吗?如果是这样,怎么做?如果没有,您是否尝试从另一个渲染器中提取 3D 数据?
  • 我正在寻找一种方法,将 3d 多边形数据(由 opengl 生成?)转换为点云。
  • @user1048719 OpenGL 不生成 3d 多边形数据。您生成它并将其提供给 OpenGL,然后由它生成 2d 图像。说好像你的问题和OpenGL完全无关。

标签: opengl rendering point-clouds


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

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

更进一步:

  • 使用深度剥离(搜索此术语)在非表面上生成样本 离相机最近。
  • 从多个视点重复渲染(或等效地进行多个旋转) 的场景),以确保从角落和缝隙中捕捉片段 场景并将每次传递生成的点附加到一个大的线性数组中。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      编辑

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

      【讨论】:

      • 感谢您的回复。 Im not interested in the final rendering. If a define e.g a polygon, at some point OpenGL has to know each and every points 多边形在 3D 空间中的坐标。现在我需要让 OpenGL 告诉我这些坐标。
      • 在这种情况下,答案取决于您如何将顶点提供给 OpenGL。如果您使用 VBO,则有 OpenGL 调用允许您检索它们的内容。查看 Associated Gets 部分中glBufferData 下的 OpenGL 文档以获取更多信息。
      • 我正在寻找一种方法,将 3d 多边形数据(由 opengl 生成?)转换为点云。
      猜你喜欢
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      相关资源
      最近更新 更多