介绍:
GIS(Geographical Information System) 是一种通过计算机系统实现地图显示的系统。可以让用户进入,显示并分析地理数据。由于大多数人不了解GIS,所以经常在IT市场上有几家大企业垄断该行业比如Intergraph, Bentley, MapInfo, Autodesk 和 ESRI,如今全球IT垄断企业微软,Google 和 Oracle 正在竞争建立一个虚拟地球的系统项目,Google Earth和Oracle Spatial。NASA也出了一个新版本,开源的GIS浏览软件叫做World Wind。
在这里,我将讲一下怎样建立一个独立的3D地形显示工具,该工具将使用C#和Managed DirectX 9.0c开发。该程序允许用户旋转视角并可以切换三种刷新模式:点,网格,平滑表面。
背景:
我最近刚刚完成一个城市级别的GIS系统。在该项目中我开发了一套软件思路,为了展现这种技术,使用在空中拍摄的一些照片作为地形的纹理。目的是和所有用.NET开发GIS的开发者分享经验。
运行条件:
开始前,我先所明该程序的运行条件:
Visual Studio .NET IDE (我用的是2005 beta 2)
Managed DirectX 9.0c SDK (我用的 August 2005 update)
.NET framework (我用的 v2.0 但在 v1.1下会运行的更好)
3D刷新方法:
首先先讲一下一般3D程序的设计思路。很抱歉,很多书写这个可是我不能给一个完整的解释,也不能对每行代码加注释,但是可以讲一下思路。
为了显示任何3D地形模型,需要一些地形的网格数据,这些数据包含一些由X,Y,Z标记的坐标点,非常重要的是Z值的存储方式,在 DirectX用的左手坐标系(想学习更多的坐标系统,可以在网上搜一下)。我定了一个网格的范围79x88,这就是我地形数据的存储方式,你也可以任意改变。同样我的数据使用20M的解决方案,这意味着实际相邻两点的距离是20M。
一旦你导入所有的地形坐标点,你将生成一个地形的模型。该模型是由一系列三角形组成。所以,很少的显卡的渲染工作由程序完成。这里有很有效的运算法,比如ROAM 或 PLOD(后来封装在DirectX 9里),这些和其它熟悉的算法是用来解决由距离决定三角面渲染数的问题。另一种办法是减少细节密度低的三角面数量,我们保留细节密度高的部分的三角面数量。我不会在这里用到这些算法,但你要了解并知道它们的用途。
最后,纹理是用来提供更加真实的效果。纹理使用自身的坐标系统,是顶靠左的0,0和底靠右的1,1。任何纹
用Managed DirectX 9和C#实现3D地形可视化
最新推荐文章于 2023-03-23 16:12:22 发布