我有一个带有颜色的(x,y,z)点的点云,并使用glDrawArray()在openGL窗口中渲染.现在我有一个相机姿势,我想从这个相机姿势渲染点,这基本上投射该相机参考帧中的所有3D点,给定相机内部参数,例如焦距等和[R | t].
我想知道是否有一种简单的方法来渲染这个图像,而不是编写一个循环通过所有点的代码片段并将它们投影到图像平面中并给我颜色. OpenGL是否具有内置的那种功能,可以完成这项工作?我想知道的另一件事是,是否还有一个函数可以告诉帧中哪些点可见,而不是遍历所有N个3D点.有效的吗?
最佳答案 除非你将你的分数指定为类似于
BSP tree的东西,否则你将不得不将它们全部循环以查看它们是否可见.
但是,通过使用某种空间层次结构,您可以快速确定哪些点不可见.例如,如果将空间划分为10 x 10 x 10个单元格并将点分配给其中一个单元格,则可以检查每个单元格的边界框以确定该单元格是否可见.因此,如果您有100,000个点,那么您将拥有1,000个单元格(假设您的点均匀分布),您将检查6个点(框的角落)而不是每个单元格100个点.
您可以快速确定哪些单元格完全可见或完全不可见,然后您只需要检查那些部分可见的单元格的内容.
通过扩展层次结构,使您的顶级单元格包含更小的单元格而不是点,您可以处理更大的点云.
您还可以改变单元格的大小,使它们都包含相同数量的点.