用Managed DirectX 9和C#实现3D地形可视化


介绍:
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。任何纹

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值