LabVIEW三维显示控件3DPicture用于显示三维物体,在使用过程中经常用到一个场景,用鼠标来识别控件中的对象,当然在三维控件中提供了两个函数:Pick point和Pick Model两个函数,如下图所示:
Pick Point函数用于检测是否鼠标碰撞到对象,Pick Model用于检测识别到的对象,通常用法如下:首先根据鼠标位置检查是否识别到对象,然后返回检测到的对象引用。
但是这两个函数存在Bug,都LabVIEW2017了,更新了这么多年,还是没有解决掉。问题如下,假设我绘制了点云、三角网格模型等,我只能是识别到整体的对象,没有办法识到点云中的一个点或者三角网格对象的一个对象。两种方案解决,第一,为每个点或者三角形创建对象,这样一来增加了对象的数量,使用起来非常卡。第二种方案,通过算法来识别对象中,拿三角网格为例说明,我们需要计算是否点击到某个三角形,需要两个算法,第一鼠标坐标映射到三维控件中的坐标位置,该坐标位置是否在某个三角形内,在就说明识别到。鼠标坐标转换为三维控件的点坐标算法如下:对象的变形属性返回对象的变形矩阵,逆运算后,坐标进行该变换运算。
另外一个重要的算法就是判断在三角形内,两维的方法在LabVIEW几何函数选板中(点位于多边形内),可以利用这个函数来计算(计算三维三角形的法向,在法向方向投影,将三维问题转换维二维问题进行计算)。另外一种方法是直接三维计算,有具体算法参考http://blackpawn.com/texts/pointinpoly/。
整体三维控件中选择某个三角面片简单DEMO如下:
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/221865.html