首页 理论教育 体数据的抽取

体数据的抽取

时间:2022-02-14 理论教育 版权反馈
【摘要】:目前比较成熟的三维拾取技术有基于对象缓冲区的拾取法、基于视口空间的拾取法、射线法、3DBubble Cursor、Depth Ray等。将三维空间中物体的包围盒投影到二维空间中,在二维坐标系下进行拾取判断。事实上是把求交运算从三维降到二维空间。3DBubble Cursor在三维环境中半透明绘制,光标球的半径可以动态改变以调整拾取范围,从而拾取该物体。拾取时,与射线相交的物体中,与深度标记距离最近的物体即被拾取。

三维交互式的定义任意测线是从二维的折线定义的思路得来的,在三维数据体上定义一条连井测线的通常操作是:首先默认设置一个基准面,可以选择带井号的地面导航图,这样在二维平面上选取的点就可以映射到三维空间中的坐标,当鼠标在井号上点击后,就拾取了一个拐点,当拾取第二个拐点后,就定义了一段测线,此时可以从LDM数据体中抽取该段的数据形成纹理,放入到三维场景图中,随着拐点的不断增加,纹理图片不断加入到三维场景中,当用户按下ESC键时,整个三维交互式的任意测线就定义完成,此时三维场景中也就出现了一条任意剖面的图像。

从以上流程中可以看出三维拾取是三维交互技术的基础,只有准确地拾取了目标才能进行下一步的交互操作,因此拾取成为三维交互中重要的一个环节。目前比较成熟的三维拾取技术有基于对象缓冲区的拾取法、基于视口空间的拾取法、射线法、3DBubble Cursor、Depth Ray等。

1.基于对象缓冲区的拾取法

将应用程序的运行设计在双缓冲区模式下,当用户要拾取一个物体时,应用程序在对象缓冲区中重画整个画面,但绘制过程中所使用颜色不再是对象的实际颜色,而是把每个对象的标识符进行编码作为颜色值;然后,应用程序读取光标下面的像素的颜色,该像素的颜色值就是所要拾取对象索引的编码,通过得到的编码值能够快速、准确地搜索到所要拾取的对象。

2.基于视口空间的拾取法

将三维空间中物体的包围盒投影到二维空间中,在二维坐标系下进行拾取判断。事实上是把求交运算从三维降到二维空间。实现步骤如下。

(1)获取鼠标点击时的屏幕坐标,并转换到视口坐标系,设该点为p(x,y)。

(2)依次取出场景物体并计算其包围盒,并将其变换到世界坐标系。

(3)获得物体的模型矩阵及投影矩阵,投影其包围盒到图像空间。

(4)在图像空间内判断点p是否落在包围盒投影区内,判断物体是否被选中。

(5)如果需要对选中物体的细部进行拾取,则可将该物体的包围盒进一步细分,直至细分到面,重复执行步骤(2) ~(4)。

3.射线法

射线拾取算法的流程是(图7-17):得到鼠标点击处的屏幕坐标,并将其转换为客户区坐标,实现视区反变换;然后,通过投影矩阵和观察矩阵把该坐标转换为通过视点和鼠标点击点的一条射入场景的射线,该射线如果与场景模型的图元相交,则获取该相交图元的信息。从数学角度来看,只要得到射线的方向矢量和射线的出射点就确定了射线方程,最后就可以利用射线判断其与空间一个图元是否相交,从而实现物体或图元的拾取。

图7-17 射线拾取法示意图

4.3DBubble Cursor

3DBubble Cursor在三维环境中半透明绘制,光标球的半径可以动态改变以调整拾取范围,从而拾取该物体。可以设置光标的半径为自动改变,这种情况下,计算光标中心与所有物体的距离,把最短距离设置为光标球的半径,这样就拾取了距离光标最近的物体。当物体与光标球相交时,在物体周围半透明绘制一个球体表示物体被拾取的状态。

5.Depth Ray

Depth Ray方法对传统射线法进行了改进,在射线上设置一个深度标记,用户可控制深度标记沿射线移动。拾取时,与射线相交的物体中,与深度标记距离最近的物体即被拾取。如图7-18所示,黑实线表示拾取射线,黑色圆点表示深度标记,虚线框体表示被拾取物体。

图7-18 Depth Ray示意图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈