OpenGL:渲染图像3D点云

时间:2012-12-24 14:34:32

标签: image opengl 3d 2d point

我有一个带有颜色的(x,y,z)点的点云,并使用glDrawArray()在openGL窗口中渲染。现在我有一个相机姿势,我想从这个相机姿势渲染点,这基本上投射该相机参考帧中的所有3D点,给定相机内部参数,例如焦距等和[R | t]。

我想知道是否有一种简单的方法来渲染这个图像而不是编写一个代码片段来循环所有的点并将它们投影到图像平面并给我颜色。 OpenGL是否具有内置的那种功能,可以完成这项工作?我想知道的另一件事是,是否还有一个函数可以告诉帧中哪些点可见,而不是遍历所有N个3D点。有效的吗?

1 个答案:

答案 0 :(得分:2)

除非你将你的分数分配给像BSP tree这样的东西,否则你将不得不循环遍历它们以查看它们是否可见。

但是,通过使用某种空间层次结构,您可以快速确定哪些点可见。例如,如果将空间划分为10 x 10 x 10个单元格并将点分配给其中一个单元格,则可以检查每个单元格的边界框以确定该单元格是否可见。因此,如果您有100,000个积分,那么您将拥有1,000个单元格(假设您的积分均匀分布),您将检查6个点(框的角落),而不是每个单元格的100个点。

您可以快速确定哪些细胞完全可见或完全不可见,然后您只需检查那些部分可见的细胞的内容。

通过扩展层次结构,使您的顶级单元格包含更小的单元格而不是点,您可以处理更大的点云。

您还可以改变单元格的大小,使它们都包含相同数量的点。