我正在尝试使用GPU功能来解决当前的问题:“给定点云P和由点和法线(Pp,Np)描述的定向平面返回云中的点,其等于或小于EPSILON的距离从飞机上“。

与我的一位同事交谈,我转向了以下解决方案:

1)准备具有附加纹理坐标的点的顶点缓冲区,使得每个点具有不同的顶点坐标2)将投影状态设置为正交3)旋转网格使得平面的法线与-z轴对齐并且偏移它使得x,y,z = 0对应于Pp 4)设置z剪裁平面使得z:[ - EPSILON; + EPSILON] 5)渲染到纹理6)从图形卡中检索纹理7)从图形卡中读取纹理并查看所呈现的点(就其索引而言),这些点是所需距离范围内的点。

现在问题如下:q1)我是否需要打开窗框才能进行此类操作? 我在MATLAB中工作并调用MEX-C ++。 根据经验,我知道,一旦你打开一个新的框架,整个套装就会惨不忍睹! q2)为GLPoint提供纹理坐标的原语是什么? q3)我不太清楚如何实现纹理渲染? 任何参考,教程都很棒... q4)你如何从卡片中检索这个纹理? 再次,任何参考,教程都会很棒......

我的时间紧迫,因此,如果您能指出我应该学习的技术的名称,而不是像某人所做的那样,请参阅GLSL规范文档和OpenGL API,那将是很好的。 这些对我的问题的答案有点过于含糊。

非常感谢任何评论。

ps另外请注意,如果可能的话,我宁愿不使用任何像CUDA这样的资源,因此,在不要求我编写新的着色器的情况下,获取尽可能多的OpenGL元素。

注意:交叉发布在http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=245911#Post245911

===============>>#1 票数:1

这很简单:设n是平面的法线,x是点。

n_u = n/norm(n)         //this is a normal vector of unit length
d   = scalarprod(n,x)   //this is the distance of the plane to the origin

for each point p_i
    d_i = abs(scalarprod(p_i,n) - d)  //this is the distance of the point to the plane

显然,“标量产品”意味着“标量产品”而“绝对产品”意味着“绝对价值”。 如果你想知道为什么只阅读维基百科上的标量产品文章。

===============>>#2 票数:0

在我看来,你应该能够实现类似于Corporal Touchy的方法aa顶点程序而不是for循环,对吧? 也许使用C API进行GPU编程,比如CUDA

===============>>#3 票数:0

首先,作为一个小免责声明:我对3D编程一无所知。

现在我纯粹的数学思想:

给定平面N(单位长度)和平面到中心的距离L(点[0/0/0])。 点X与平面的距离由N和X的标量积减去L到中心的距离给出。 因此你只需要检查一下

| n。 x - L | <= epsilon

作为标量产品和| | 绝对值

当然,你必须首先将平面与法线相交以获得距离L.

也许这有帮助。

===============>>#4 票数:0

我对Andrea Tagliasacchi有一个问题,为什么?

只有当你在观察1000个点和可能的100个飞机时,使用所概述的方法才会有任何好处。 正如我的Corporal Touchy所描述的那样,点击产生点和平面。

此外,由于像素的有限性,您经常会发现两个或多个点将投射到纹理中的相同像素。

如果你仍然想要这样做,我可以用C ++编写一个样本过剩程序,但是这对MATLAB有什么帮助我不知道,因为我不熟悉它。

  ask by translate from so

未解决问题?本站智能推荐:

2回复

打开GL绘制静态点

在Open-GL中绘制静态点云是否可行 再后来绕这云旋转吗? 不用再画一次吗?
2回复

通过gldrawarrays和GL_POINTS淹没圆圈时得到带有白色边框的点

我正在尝试使用glDrawArrays和GL_POINTS用OpenGL绘制一个圆。 我的圆圈绘制正确,但是每个点都有白色边框(请参见屏幕截图)。 这是代码: 我认为混合模式出了点问题,但是我找不到合适的模式。 有什么建议么?
1回复

如何在LIDAR点云中裁剪区域

我有2个数据设定点云,我想一起修剪其中的一部分。 由于它们的体积太大,因此无法使用以下代码进行裁剪。 您能帮我怎样种植它们吗? 使用的代码是: 谢谢大家。
3回复

在2D点云中查找简单形状

我目前正在寻找一种将简单形状(例如T形或L形)拟合到2D点云的方法。 我需要的是形状的位置和方向。 我一直在研究几种方法,但大多数看起来非常复杂,并且首先涉及构建和学习示例数据库。 当我处理非常简单的形状时,我希望可能有一个更简单的方法。
1回复

将网络摄像头与点云库(PCL)结合使用

是否可以将网络摄像头与点云库(PCL)一起使用,还是需要使用深度传感器摄像头?
1回复

如何使用Postgis缓冲点?

我在Ubuntu Linux上使用Postgres / Postgis。 我正在寻找一个点(或多个点)一定距离的缓冲,如图所示。 我已经能够生成一个点作为postgres表pnt : Postgis具有一个ST_Buffer函数,该函数大概可以完成缓冲区操作,尽管我不确定如
2回复

使用ORMLite建模几何点

我使用PostgreSQL作为我的应用程序的数据库。 我还使用ORMLite作为映射。 在数据库的表中,我使用point作为存储目标位置(x,y)的数据类型。 所以我的问题是:如何在ORMLite中映射PostgreSQL中的类型点?
2回复

在两组中找到一对最接近的点的智能,快速方法是什么?

例如,我有两个要点列表: 找到这样的i和j的最佳方法是什么,从而使a.get(i).distance(b.get(j))最小? 显而易见的解决方案是蛮力-计算从a中的每个点到b中a每个点的距离,并使该对保持最短的距离。 但是此算法为O(n^2) ,效果不好。 有更好的方法吗?
1回复

在WPF C#中绘制数百万个点

我需要在WPF窗口中可视化由数百万个3D点组成的点云。 由于它将有很多要点,因此性能很重要,但是我不需要绘制任何高级图元,例如三角形,四边形或位图。 经过调查,我想出了一些诸如D3D,D3DRS_POINTSIZE和D3DImage interop的关键字,并结合了本机代码和托管代码
1回复

如何从仅包含外部可见点的浊点获取表面?(Matlab)

我在3D矩阵中有很多点。 该矩阵的每一列都包含该点的不同坐标(x,y,z)。 我需要找到一种方法,仅获取从一个方向上可见的外部点,并将它们放置到另一个矩阵中。 或以其他方式,我需要删除被遮盖的点。 我没有丝毫想法怎么做。 如果有人可以帮助,我将不胜感激。