软件实现三维地图引擎的研究

 

写在前面:

这篇东西,本来写下来是想去投出版社的。结果打听下来,这还要一笔不大不小的花费,除了审稿费,还有版面费,少的几百,多的上千。艾,写的也不咋地,先放在这里好了。等哪天手头宽裕了再说吧(顺便说一下现在的出版社可真是向钱看啊)。

 

1,    引言:

当前在许多导航类产品中地图引擎的使用已经很多见了,特别是随着近些年硬件技术的发展,加上许多三维的图形绘图软硬件库的支持,使得三维地图引擎的使用也变得比较常见了。可以说一款好的三维地图引擎对于整个产品来说是显得相当重要的。

针对于应用层的地图图形软件开发使用的比较普遍的三维图形库有OpenGLDirect3D等。这些图形库都是针对于三维图形绘制特别优化的,包括对一些关键算法和特定绘图硬件设备的支持。它们提供了一些灵活的接口调用而将具体的实现方式完全的封装了起来。这样为开发人员在使用时提供了相当的便利。但也使得开发人员不清楚图形库的具体实现方式,只专注于应用的实现。

本文的目的是想通过介绍纯软件方式实现的三维地图引擎,使得人们了解三维地图引擎的基本结构和流程,内部的实现方式,从而能够更好的掌握三维地图引擎开发的原理和本质。

 

2,    三维引擎简介:

     通常按用途划分三维引擎基本上可以分为:太空引擎、地形引擎、FPS室内引擎、光线投射和体素引擎、混合引擎。

2.1、太空引擎:

       该引擎在三维引擎中不是那么复杂。在大多数情况下,三维太空游戏是基于物体的,这意味着所有的实体都是物体,在渲染之前,有很多物体已经从流水线中剔除;然后在渲染期间,使用简单的画家算法或Z缓存对组成每个物体的多边形进行排序,然后将光照、动画等通过常规方式处理。

2.2、地形引擎:

       比太空引擎复杂点的是地形引擎。当然,地形引擎中需要处理的不光是地形,还有处于地形中的物体,包括复杂的动画和地形跟踪算法。然而,地形引擎的主要问题是,如何表示世界数据库,它可是非常庞大的。

       例如,假设要创建一个大小为100000*100000单位的多边形网格世界,其中每个多边形的大小为200*200单位。这意味着该多边形网格包含大约250000((100000/200*100000/200))个多边形。

2.3FPS室内引擎:

       FPS的全称是第一人称射击,这种引擎比较棘手。首先、玩家大部分时间都在室内,这就要求清晰的细节和近距离;其次,FPS世界在日益增大,多边形数据库也将随之增大,这意味着不能简单的将整个世界传递给三维流水线,而必须使用空间划分技术将世界区分,以最大限度的减少需要考虑的多边形。

2.4、光线投射和体素引擎:

       原则来说,多边形的引擎基本上都是基于光线投射和体素的。光线投射是一种被用于很多三维FPS游戏中的技术,这些游戏是基于向前光线跟踪的,即从玩家的视点投射一条光线,穿过视平面,直到遇到物体。这种技术可以非常快的生成三维场景。

2.5、混合引擎:

       该种引擎被设计成可以同时模拟太空、陆地和FPS。它的意义在于,很多时候你可能想创建一个有多种环境的世界,这样你不得不使用多个不同类型的引擎,以便根据要完成的任务使用合适的引擎,而不是使用一个引擎来完成所有的任务。

 

3,    三维地图引擎的基本构架:

3.1、三维坐标系的问题:

在我们了解三维地图引擎构架之前,先了解一下三维坐标系的问题。在三维的世界中有着很多不同的坐标系,每种坐标系表达的意义都是不同的,而他们之间又有着一些特定的转换关系。主要的坐标类型有以下几种:

A,模型坐标(局部坐标)

B,世界坐标

C,相机坐标

D,透视坐标

E,屏幕坐标

模型坐标,也称局部坐标。是表示在创建物体时物体本身所处的坐标系坐标。

世界坐标表示的是虚拟空间中的实际位置,物体将在虚拟空间中移动和被变换。

当我们的实现处于某一个位置观察物体时,则需要定义相机坐标系,同时将世界坐标转成相机坐标。

将三维空间中的坐标通过透视变换映射到平面坐标系上的坐标称之为透视坐标。这种坐标的变换称为透视变换。

将通过投影变换得到的一系列的点根据屏幕的尺寸和相关参数显示在屏幕上,这便是屏幕坐标。

以上各个坐标系之间存在着相互转换的关系,正常情况下绘制一个三维物体需要经过模型坐标,到世界坐标,到相机坐标,到透视坐标,到屏幕坐标的变换。

1 包含光照处理的坐标转换流水线

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值