APP下载

一种在虚拟三维场景中的取点定位方法

2017-06-06杨忠杨皓杜华

电脑知识与技术 2017年9期

杨忠 杨皓 杜华

摘要:基于虚拟三维场景的计算机仿真应用系统通常需要解决在如何将二维平面上点的坐标转换成三维坐标这一难题,对应到基于地形数据的实际三维地形应用程序,问题则变为如何利用鼠标点击来获取点的实际地形值。针对这一难点,本文提出并实现了一种在虚拟三维场景中的取点定位方法。通过实验利用该方法对给定三维地形中两个点进行取点定位准确的得到了两点的地形数据,并对其误差进行了分析,得出结论该方法实际可行,取值精度高,对于實际的三维地形开发系统中的取点定位具有一定的价值。

关键词:三维地形;取点定位;坐标变换;Direct3D

三维可视化是用于显示描述和理解地下及地面诸多地质现象特征的一种工具,广泛应用于地质和地球物理学的所有领域。Direct3D是目前在三维地形和三维场景可视化开发中使用比较广泛的开发环境。Direct 3D是基于微软的通用对象模式COM(Common ObjectMode)的3D图形API,它是由微软公司树立的3D API规范,Direct3D被认为是3维可视化应用开发的业界标准。自发布以来,Direct3D以其良好的硬件兼容性和友好的编程方式很快得到了广泛的认可,现在几乎所有的具有3D图形加速的显示适配器都对Direct3D提供良好的支持。

然而,在Direct3D的3D虚拟场景中用户使用鼠标来在点选三维坐标中的位置时,鼠标返回的值仅是一个二维信息,该二维信息即鼠标在屏幕上的二维坐标,因而必须对其进行逆变映射,以此确定该屏幕的二维平面位于个三维坐标系中的具体位置。然而一个二维的坐标位置对应的三维坐标中的的位置可以是z轴上的任意点。而Direct3D提供的变换函数需要提供窗口的z坐标(深度坐标胙为参数,如果要三维虚拟场景中进行任意取点得到其三维坐标,则只能通过设计新的算法解决。如利用直线与曲面的交点求解三维场景中一点到曲面的最近点算法。在真实的三维地形中,往往因为海量空间地形数据未经过归一化处理,导致其运算工作极其繁杂、耗时,计算量过大,曲面函数难以准确建立,因而此类方法在解决实时性要求高的三维地形取点定位的应用中有很大局限性。基于以上原因,设计出一种新的方法来解决对Direct3D三维地形的取点定位问题,其基本思路是以试探方式获取同一点的不同地形值,再进一步对地形值和试探值进行对比求差,判断差值是否在给定范围内,根据条件判断结果确定网格坐标,通过插值计算即可求得相应的地形值。