4

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

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

4

1 回答 1

2

除非您将点分配给诸如BSP 树之类的东西,否则您将不得不遍历它们以查看它们是否可见。

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

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

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

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

于 2012-12-24T14:53:26.720 回答