渲染3D场景指向云

时间:2011-11-16 01:10:24

标签: opengl rendering point-clouds

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

详细信息:

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

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

任务可能还是不可能?

3 个答案:

答案 0 :(得分:2)

  • 使用正交视图渲染场景,以便所有场景立即适合屏幕。
  • 使用g-buffer(搜索此术语或“胖像素”或“延迟渲染”)进行捕获 帧缓冲区中每个采样点处的(X,Y,Z,R,G,B,A)。
  • 回读你的帧缓冲区并将(X,Y,Z,R,G,B,A)元组放在每个采样点 线性阵列。

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

进一步说明:

  • 使用深度剥离(搜索此术语)在非表面上生成样本 离相机最近。
  • 从多个视点重复渲染(或等效地进行多次旋转 (场景)确保捕获碎片的碎片和碎片 场景并将每个传球产生的点附加到一个大的线性阵列中。

答案 1 :(得分:1)

如果我理解正确,您想要解构3D场景的最终渲染(2D)。通常,OpenGL没有内置的功能来执行此操作。

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

根据您的应用程序域,您可能处于几乎不可能的状态,或者可能存在可用于识别形状和顶点的快捷方式。

修改

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

答案 2 :(得分:1)

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