地形图怎么通过软件建立三维中国地形图实体模型?

三维地图_百度百科
关闭特色百科用户权威合作手机百科
收藏 查看&三维地图
三维,或3D电子地图,就是以电子地图为基础,按照一定对现实世界或其中一部分的一个或多个方面的三维、抽象的描述。不仅通过直观的地理实景模拟表现方式,为用户提供地图查询、出行导航等地图检索功能,同时集成生活资讯、、、、出行导航等一系列服务。在给人们带来方便的同时,也给、社会稳定和人们隐私等带来威胁。外文名Three dimensional map别&&&&名3D电子地图主要制作软件Sketchup、3DSMAX、ArcScene主要公司百度、都市圈、谷歌、查查吧
地图作为记录地理信息的一种图形语言形式,不仅为三维地图人们的出行提供了便利,同时也丰富了图形学、、以及的飞速发展,传统的二维被注入了新的活力,承载在互联网上的三维电子地图正成为电子地图发展的一个重要方向。不仅通过直观的地理实景模拟表现方式,为用户提供地图查询、出行导航等地图检索功能,同时集成生活资讯、、、虚拟社区、出行导航等一系列服务,为政府机关、企事业单位、商家企业提供宣传互动的快速通道,并以全新的人性化界面表现,为人们的日常生活、网上办事和网络娱乐等活动提供便捷的解决方案,从而生动真实地实现了网上数字城市,让人们真正感受到自己生活在一个信息化的城市里。可以说,成为了互联网业务发展的新的亮点。但是,任何事情都有两面性。在给人们带来方便的同时,也给、社会稳定和人们隐私等带来威胁。需要制定相应法律等措施来维护。三维地图地图是根据一定的数学法则,将自然地理的自然现象和社会现象通过概括和取舍用符号缩绘在平面上的图形。则是以为基础,在适当尺寸的屏幕上按照一定比例显示的地图。而三维就是以三维电子地图数据库为基础,按照一定比例对现实世界或其中一部分的一个或多个方面的、抽象的描述(或综合),其形象性、功能性远强于二维电子地图。结合发展迅速的和丰富的网络资源,电子地图和相结合,就形成了简单易用的电子地图。网络三维通常运用网络拓扑技术、对物体实体的坐标进行数学建模,并且基于处理、WEB技术、、三维和所实现。实景地图是利用或技术直接扫描建筑物的高度和宽度,最终形成三维地图文件。实景地图是基于实物拍摄、抽象采集技术实现的。虽然从照相机出现的那一刻起,就出现了实景地图,但是真正的发展是20世纪以来,随着飞艇、飞机和等高空飞行工具的出现,获得了一个全新的视角并可以进行全方位的拍摄,实景三维地图才得到真正的发展。其直观性、信息量和精确性远非传统二维可比。
不过,这种地图获取的成本很高,基本上局限于军事或局部三维地图,普通人群基本上看不到真正的实景地图。直到最近几年,搜索引擎大腕Google把遥感地图资源和技术以及互联网集合起来,推出Google Earth和Google Maps,将人们带进了一个全新的广阔空间,从而带给人栩栩如生、身临其境的体验。另外,国内一些公司也借助于Web GIS技术,利用飞艇、飞机和汽车等交通工具,从不同的角度进行拍摄,把整个地区都拍一遍,通过和地图上每个具体地点联系起来,获得这个地区的实景地图。但是,这种方式还是受交通工具的限制,只有交通工具可以到达的地方才可以进行采集,故实景地图给出的信息还是有限的。例如,城市实景地图主要采用汽车为交通工具,所以很多政府机关、科研院所、社区小院无法拍到。但是实景地图吸引人之处不仅仅在于地图本身,呈现方式和功能也同样重要。所以,作为本土实景地图,更适合国民口味,同样也得到快速发展。虚拟地图是通过人工拍摄获取建筑物的外形,而后将各个孤立的单视角模型无缝集成,经过虚拟美化处理以后,形成三维地图数据文件。
虚拟地图是以现实地理信息为基础,基于WEB GIS和所实现。可以通过任何方式(诸如采用人工拍照方式采集)获得实际的地理信息,通常没有实景三维地图对拍摄要求高。将获得的地理信息进行加工拼接,通过建模的方式加以整理,最后以的方式呈现。
虚拟三维地图呈现占虚拟三维地图整体的比重较大,故不同公司使用不同的呈现技术,给使用者的感受差别也非常大。例如,E都市使用的是(GIS)平面地图,通过人工采集方式拍照、建模和上网,经过专业训练的工作人员拍摄到楼宇3个面以上的照片,并尽可能获得楼宇的真实名称。之后,将采集回的、表格和照片还原到一个模型的环境,再利用开发的后台管理将各个孤立的单视角3D模型无缝集成在一起后,移植到虚拟地图,使用者就可以通过进行交互式的访问。鉴于虚拟地图的界面友好和量小,Google也开发了类似的Google Street View来呈现三维地图,结合实景三维地图丰富三维地图信息。1、准确实测:卫星影象图作为采集数据的一个蓝本,确保了建筑物的位置准确性,和3D美工制作铺设楼房的正确性。由于卫星图并非即时的图片,制作以实测为准。  2、高清建模:都市圈采用当今国际流行多边形建模技术,在保证还原楼房真实形状的同时也能保证制作的速度。在制作楼房的时候,根据采集照片对楼房的每一部 分进行推敲,结合卫星图片制作建筑,制作好建筑后,严格按照卫星图片上建筑的位置对制作好的建筑进行摆放,减少建筑与建筑之间、建筑与地表之间的位置误 差。  3、精细贴图:都市圈对每一栋建筑进行细致的贴图,建筑外墙、窗体、装饰物的材质来自采集的照片或者精选的素材库,尽量还原建筑的真实外观。  4、真实渲染:都市圈采用渲染效果非常接近于真实的光线跟踪渲染器,使都市圈的三维地图有着良好的层次感和丰富的色彩,在增强立体层次的时候不会让客户觉 得很刺眼,大大提高了产品的友好度,同时根据光线跟踪渲染器的特点对模型、贴图进行优化,使渲染的速度进一步的提升同时不降低产品的效果。  5、美化环境:都市圈按照卫星图片来进行环境的布局,对照卫星图片布置绿化、草地、树木,同时在保证在真实的情况下对环境做美化处理,增强产品的可看性。[1]作为互联网的新业务,其出现和生存肯定是和赢利分不开的。相关公司把它作为一个平台,来与、、网络娱乐、地图导航、城市黄页、商业、电子咨询等整合,通过平台上的业务获取赢利。
:结合国家电子政务中数字城市规划,政府及运营商合作开发运营,不仅可赚取一定政府专款,同时对电子地图也是一个宣传。
使用费用:满足使用者的最大需求,收取使用者使用费。
宣传:在地图上增加广告(包括企业、景点、商业区等),并增加相应链接,使使用者可直接访问链接点,从而向被宣传者收取广告费用。
:在地图上增加QQ,Email,Blog,BBS等,分享相应企业收入。
企业合作:公司可与移动终端厂商或其它增值业务提供商合作,为他们开放,提供电子地图,从而赚取合作费用。三维地图网络三维虽然带来了互联网的一大进步,但也带来了一些安全和隐私问题。网络三维服务的内容是地图,而地图对国家而言在一定程度上是具有战略意义的,也就是说,某种内容或者某种精度的地图是要保密的,否则国家战略秘密会无密可保。首先,采集缺乏监管。2008年,所有电子地图使用的并未经过相关主管部门的审查,一些敏感地区并未经过处理加工,缺乏系统的规范和监督,存在被不法分子不正当利用的可能性。其次,网站对注册会员没有进行审查管理。一些电子地图网站允许注册会员在实景照片上随意添加说明文字。而随意添加的不良信息可能对社会造成不良影响,甚至引起犯罪,严重时甚至威胁。2008年,经营地图还存在一直投钱不赚钱的现状,几大运营商对管理层考核要求是对项目的是否赚钱为目的的,而不是为以后是否有机会赚钱为目的,所以想期望运营商对其的投入是不理智的。经营者必须抓住其地图吸引力为突破口,或者以游戏避免政策的风险,积极进行地理信息的收集,努力开掘草根们自发性的开发及利用。首先,应加强服务提供商企业的企业审核,只有符合要求的企业才可开发和提供电子地图业务。其次,应提高企业自律要求,企业必须具备一定的审核能力,并进行定期检查,对不符合要求的予以一定惩罚。此外,应增强网络三维监查手段,使相应监管部门可以方便地发现是否有违反规定的现象。[2]日晚间,百度地图有了新变化。百度三维地图截图在使用百度地图服务时,除普通的功能之外,新增加了地图的按钮。用户点击这一按钮之后,百度地图提供的内容将转换成“模式”。这一模式通过数字的方式,将平面的地图信息立体化,其呈现效果称为2.5D更为恰当。
以为例,部分三环外的图像缺失,而现有数据显然更新不算非常及时。
信息显示,百度地图是与合作推出。由亿动运作,专业从事地图的服务。亿动已经获得颁发的乙级测绘资质。
2010年,自己网站上除北京、等地区之外,在提供、地图等功能的同时,还在、、武汉等城市的地图服务中,提供了相应的图像。不过,图像的功能暂时并未被百度地图引入。
来自的资料表明,百度对互联网地图资质的申请已获公示,获得牌照几成定局。据悉,或对外颁发牌照。[3]
新手上路我有疑问投诉建议参考资料 查看(地图学与地理信息系统专业优秀论文)基于大比例尺地形图的三维地理场景快速构建..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
(地图学与地理信息系统专业优秀论文)基于大比例尺地形图的三维地理场景快速构建方法研究
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
三维地形图与地图符号.doc
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口2158人阅读
写在前面:
这篇东西,本来写下来是想去投出版社的。结果打听下来,这还要一笔不大不小的花费,除了审稿费,还有版面费,少的几百,多的上千。艾,写的也不咋地,先放在这里好了。等哪天手头宽裕了再说吧(顺便说一下现在的出版社可真是向钱看啊)。
1,&&& 引言:
当前在许多导航类产品中地图引擎的使用已经很多见了,特别是随着近些年硬件技术的发展,加上许多三维的图形绘图软硬件库的支持,使得三维地图引擎的使用也变得比较常见了。可以说一款好的三维地图引擎对于整个产品来说是显得相当重要的。
针对于应用层的地图图形软件开发使用的比较普遍的三维图形库有OpenGL、Direct3D等。这些图形库都是针对于三维图形绘制特别优化的,包括对一些关键算法和特定绘图硬件设备的支持。它们提供了一些灵活的接口调用而将具体的实现方式完全的封装了起来。这样为开发人员在使用时提供了相当的便利。但也使得开发人员不清楚图形库的具体实现方式,只专注于应用的实现。
本文的目的是想通过介绍纯软件方式实现的三维地图引擎,使得人们了解三维地图引擎的基本结构和流程,内部的实现方式,从而能够更好的掌握三维地图引擎开发的原理和本质。
2,&&& 三维引擎简介:
&&&& 通常按用途划分三维引擎基本上可以分为:太空引擎、地形引擎、FPS室内引擎、光线投射和体素引擎、混合引擎。
2.1、太空引擎:
&&&&&& 该引擎在三维引擎中不是那么复杂。在大多数情况下,三维太空游戏是基于物体的,这意味着所有的实体都是物体,在渲染之前,有很多物体已经从流水线中剔除;然后在渲染期间,使用简单的画家算法或Z缓存对组成每个物体的多边形进行排序,然后将光照、动画等通过常规方式处理。
2.2、地形引擎:
&&&&&& 比太空引擎复杂点的是地形引擎。当然,地形引擎中需要处理的不光是地形,还有处于地形中的物体,包括复杂的动画和地形跟踪算法。然而,地形引擎的主要问题是,如何表示世界数据库,它可是非常庞大的。
&&&&&& 例如,假设要创建一个大小为000单位的多边形网格世界,其中每个多边形的大小为200*200单位。这意味着该多边形网格包含大约250000(()*())个多边形。
2.3、FPS室内引擎:
&&&&&& FPS的全称是第一人称射击,这种引擎比较棘手。首先、玩家大部分时间都在室内,这就要求清晰的细节和近距离;其次,FPS世界在日益增大,多边形数据库也将随之增大,这意味着不能简单的将整个世界传递给三维流水线,而必须使用空间划分技术将世界区分,以最大限度的减少需要考虑的多边形。
2.4、光线投射和体素引擎:
&&&&&& 原则来说,多边形的引擎基本上都是基于光线投射和体素的。光线投射是一种被用于很多三维FPS游戏中的技术,这些游戏是基于向前光线跟踪的,即从玩家的视点投射一条光线,穿过视平面,直到遇到物体。这种技术可以非常快的生成三维场景。
2.5、混合引擎:
&&&&&& 该种引擎被设计成可以同时模拟太空、陆地和FPS。它的意义在于,很多时候你可能想创建一个有多种环境的世界,这样你不得不使用多个不同类型的引擎,以便根据要完成的任务使用合适的引擎,而不是使用一个引擎来完成所有的任务。
3,&&& 三维地图引擎的基本构架:
3.1、三维坐标系的问题:
在我们了解三维地图引擎构架之前,先了解一下三维坐标系的问题。在三维的世界中有着很多不同的坐标系,每种坐标系表达的意义都是不同的,而他们之间又有着一些特定的转换关系。主要的坐标类型有以下几种:
A,模型坐标(局部坐标)
B,世界坐标
C,相机坐标
D,透视坐标
E,屏幕坐标
模型坐标,也称局部坐标。是表示在创建物体时物体本身所处的坐标系坐标。
世界坐标表示的是虚拟空间中的实际位置,物体将在虚拟空间中移动和被变换。
当我们的实现处于某一个位置观察物体时,则需要定义相机坐标系,同时将世界坐标转成相机坐标。
将三维空间中的坐标通过透视变换映射到平面坐标系上的坐标称之为透视坐标。这种坐标的变换称为透视变换。
将通过投影变换得到的一系列的点根据屏幕的尺寸和相关参数显示在屏幕上,这便是屏幕坐标。
以上各个坐标系之间存在着相互转换的关系,正常情况下绘制一个三维物体需要经过模型坐标,到世界坐标,到相机坐标,到透视坐标,到屏幕坐标的变换。
图1 包含光照处理的坐标转换流水线
3.2、渲染三维世界:
&&&&&& 了解了以上的一些坐标概念,我们便可以进一步去了解一下三维渲染的世界,可以从线框的绘制模式转变为填充的绘制模式。三维渲染主要包括以下三部分:
&&&&&&&&&&&&& 光照模型
&&&&&&&&&&&&& 纹理映射技术
&&&&&&&&&&&&& 三维裁剪技术
&&&&&& 3.2.1、光照模型:
所谓光照模型,是根据光学物理的有关定律计算画面上景物表面各点投影到观察者眼中的光亮度和色彩组成的公式。
一个好的光照模型应该满足以下要求:
(1)能产生较好的立体视觉效果;
(2)在理论上具有一定的合理性或严密性;
(3)较小的计算量,以保证较快的绘制速度。
对于自然景物的地形表面,光照模型可考虑以下几项影响:
(1)光源的位置;
(2)光源的强度;
(3)视点的位置;
(4)地面的漫反射光;
(5)地面对光的反射和吸收特性。
按照光源的种类我们可以分为以下几种:
(1)定向光源;
(2)点光源;
(3)聚光源。
按照光的传播路径可以分为以下几种:
(1)环境光;
(2)散射光;
(3)镜面反射光。
&&&&&& 3.2.2、纹理映射技术:
纹理映射技术的使用是为了让三维地形图更有真实感。这是一个将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。
如果对于多边形来说纹理太大或太小,那么纹理需要被过滤以匹配空间。有两种过滤方式:放大和缩小。放大过滤器将纹理放大,缩小过滤器将纹理缩小。纹理放大通常很简单,会获得一张模糊的图像,而纹理缩小比较复杂,不正确的缩小会导致锯齿。
图2 像素级别的mipmap
&&&&&& 3.2.3、三维裁剪技术:
在三维图形系统中,裁剪是相当重要的主题,如果没有对集合体进行正确的裁剪,不但无法正确的显示,还有可能导致一系列诸如内存崩溃、除零异常等等问题。剪裁的目的就是把落在用户定义的窗口外的部分图形裁减掉,从而为图像识别和图像处理提供清晰的对象。
三维图形剪裁分为两种:一种是图像空间剪裁。在所要渲染的物体都被转换为屏幕坐标后,再使用屏幕空间或视口对其进行裁剪。图像空间剪裁很易于实现。但也意味着对每个物体都要进行剪裁,无论其在或不在窗口内。因而效率不高;另一种是物体空间剪裁。在对几何体进行投影变换前,先用视景体对物体进行剪裁,然后再对其进行坐标变换。根据特定的剪裁区域对构成三维空间的基本几何体进行剪裁。可以根据二维或三维视野的剪裁区域对物体或多边形进行裁剪,然后将裁减后的多边形传给三维流水线的下一个阶段进行处理。大多数三维图形引擎都采用物体空间剪裁的方法。
4,&&& 软件实现三维地图引擎:
不依赖于三维图形库,使用软件的方式实现三维地图引擎的方式可以让我们更加了解三维地图引擎的内部算法与结构。为了实现软件的三维地图引擎,我们首先需要了解一些关键数据结构的定义,其次会介绍一下常用的算法。以下涉及到的数据结构和代码都是用C/C++语言实现的。
&&&&&&&&&&&&& 4.1、软件三维地图引擎的主要数据结构:
&&&&&&&&&&&&&&&&&&&& (1)表示三维点数据的结构:
如何表示一个点在三维空间中的相关信息对于之后算法的编写和优化是比较重要的。
//这是三维点数据的结构
//点数据采用齐次坐标的表示方式。一共有4个变量。分别是x、y、z轴//的坐标和分量w
typedef struct VECTOR4D_TYP{
Union{//以联合的数据结构表示方便存储和调用
float M[4];
&&&&float x,y,z,w;
} VECTOR4D, POINT4D,
*VECTOR4D_PTR, *POINT4D_PTR;
//这是带有法线向量的点的数据结构,也是以齐次坐标的方式表示面中的//各个点
typedef struct VERTEX4D_TYP{
Union{//以联合的数据结构表示方便存储和调用
float M[9];
&&&&&&&& float x,y,z,w;// 点数据
&&&&&&&& float nx,ny,nz,// 各个点的法线向量
&&&&&&&& // 点的属性
&&&&&&&& };
} VERTEX4D, *VERTEX4D_PTR;
&&&&&&&&&&&&&&&&&&&& (2)表示物体的结构:
在三维世界中,所有的物体都是多边形组成,而多边形最小可以表示为一个三角形。所以我们需要先了解一下三角形的结构,然后再看一下物体的表示结构。
//表示一个多边形面的数据结构,用到了我们之前定义的点的结构
typedef struct POLY4D_TYP{
&&&&&& int
//状态信息
&&&&&& int
//多边形的物理属性
&&&&&& int
//绘制多边形的颜色
char *//如果使用材质贴图的话,存放材质贴图的数//据指针
&&&&&& int
//材质贴图的类型
&&&&&& &&&&&& VERTEX4D_PTR//多边形点的数据存放列表
&&&&&& float
//多边形的点的数量
} POLY4D, *POLY4D_PTR;
typedef struct OBJECT4D_TYP{
&&&&&& int
//物体的ID编号,唯一对应的识别表示
&&&&&& char
name[64]; //物体名
&&&&&& int
//物体所处的状态
&&&&&& int
//物体的物理属性
&&&&&& int
//该物体所用材质贴图的索引
&&&&&& float
*avg_ //物体的平均半径,用来做碰撞检测
&&&&&& float
*max_ //物体的最大半径,用来做碰撞检测
&&&&&& &&&&&& VECTOR4D world_ //物体在世界坐标中的位置
&&&&&& &&&&&& VERTEX4D_PTR vlist_//物体的多边形坐标的数据指针
&&&&&& VERTEX4D_PTR
vlist_//经过坐标转换之后的坐标数据指针
&&&&&& VERTEX4D_PTR
head_vlist_//多边形坐标的头指针
&&&&&& VERTEX4D_PTR
head_vlist_//转换之后多边形坐标头指针
&&&&&& char
*//如果物体使用材质贴图,则是材质贴图的指针
&&&&&& int
num_ //物体的多边形数目
&&&&&& POLY4D_PTR
//多边形的数据指针
} OBJECT4D, *OBJECT4D_PTR;
&&&&&&&&&&&&&&&&&&&& (3)表示相机位置的结构:
&&&&&&&&&&&&&&&&&&&&&&&&&&& //相机的数据结构
&&&&&&&&&&&&&&&&&&&&&&&&&&& typedef struct CAM4D_TYP{
&&&&&& int
//当前相机所处的状态
&&&&&& int
//当前相机的物理属性
&&&&&& VECTOR4D
//当前相机所处在的世界坐标中的位置
&&&&&& float
view_//视线的深度
&&&&&& float
near_clip_z;//相机视角的近裁剪面
&&&&&& float
far_clip_z; //相机视角的远裁剪面
&&&&&& float
viewplane_//裁剪面的宽度
&&&&&& float
viewplane_//裁剪面的高度
&&&&&& float
viewport_//视口的宽度
&&&&&& float
viewport_//视口的高度
&&&&&& float
viewport_center_x;&&&&&& //视口中心点的x坐标
&&&&&& float
viewport_center_y;&&&&&& //视口中心点的y坐标
} CAM4D, *CAM4D_PTR;
&&&&&&&&&&&&&&&&&&&& (4)表示光照的数据结构:
光照其实有很多种的模型,而在一个光照的数据结构中要尽量做到能包含所有的模型参数。同时一个场景中可能会有多个光源。
//光照的数据结构
typedef struct LIGHT_TYP{
&&&&&& int
//光照的状态
&&&&&& int
//光照ID号,唯一识别光源的标志
&&&&&& int
//光源的物理属性
&&&&&& int
c_//环境光照系数
&&&&&& int
c_//漫反射光照系数
&&&&&& int
c_//镜反射光照系数
&&&&&& VECTOR4D
//光照模型所处世界坐标中的位置
&&&&&& VECTOR4D
//光照模型在世界坐标中的传输方向
&&&&&& float
kc, kl,//衰减系数
&&&&&& float
spot_//聚光源的内射角度
&&&&&& float
spot_//聚光源的外射角度
&&&&&& float
//聚光源的功率系数
} LIGHT, *LIGHT_PTR;
&&&&&&&&&&&&&&&&&&&& (5)表示渲染材质的结构:
&&&&&&&&&&&&&&&&&&&&&&&&&&& //渲染材质的数据结构
&&&&&&&&&&&&&&&&&&&&&&&&&&& typedef struct MAT_TYP{
&&&&&& int
//材质的状态
&&&&&& int
//材质的ID号
&&&&&& char
name[64]; //材质名
&&&&&& int
//材质的物理属性
&&&&&& int
//使用填充方式的颜色
&&&&&& float
ka, kd, ks, //作用在当前材质上的一些光照系数因子
&&&&&& int
ra, rd, //当前材质如果有多个光源同时作用时的系数
&&&&&& char
texture_file[80];//材质贴图的文件名
&&&&&& BITMAP_IMAGE
//实际的文件内容
} MAT, *MAT_PTR;
&&&&&&&&&&&&& 4.2、经典的三维地图引擎的相关算法:
三维地图引擎从模型的建立到最后效果的输出需要经过几个大的步骤,包括坐标转换,光照渲染,纹理映射,三维裁剪,空间划分和可见性算法等。下面详细介绍一种比较常见的纹理贴图算法的软件实现。
4.2.1、Mipmapping纹理贴图:
我们前面已经简单介绍过了Mipmapping纹理贴图的原理,该算法主要是用于解决走样的问题。
为实现Mipmapping,需要创建有纹理组成的mip链,其中每个纹理的大小都为前一个纹理的1/4(沿每条轴缩小一半),最后一个纹理的大小为1*1。另外,这些mip纹理都是使用滤波器(平均滤波器、箱型滤波器、高斯滤波器)生成的。渲染多边形时,根据多边形离视点的距离或多边形被投影后的面积,选择使用合适的mip纹理。这样,将最大限度的减少闪烁和低频走样/波形图案。接下来使用伪代码的形式分析源码。
int Generate_Mipmaps(BITMAP_IMAGE_PTR
source,//原始纹理&&
&&BITMAP_IMAGE_PTR *mipmaps, //指向mip纹理数
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&//组的指针
&&&&&&&&&&&&&& &float gamma)// gamma 修正因子
// 这个函数创建一个mip纹理链
// 调用该函数时,mipmap指向原始纹理
// 该函数退出时,mipmap指向一个指针数组,其中包含指向各个mip级//
纹理的指针
// 另外,该函数返回mip等级数,如果发生错误,则返回-1
// 最后一个参数gamma用于提高mip纹理的亮度,因为平均滤波器会降// 低亮度
// 该参数大于1.0时,将提高亮度;小于1.0时将降低亮度;为1.0时没// 有影响
//计算mip等级数
//为指针分配内存
//将元素0指向原始纹理
//设置宽度和高度(它们相同)
//使用平均滤波器生成各个mip纹理
for (int mip_level = 1; mip_level
&& num_mip_ mip_level++)
//计算一下mip纹理的大小
//为位图对象分配内存
//创建用于存储mip纹理的位图
//让位图可用于渲染
//遍历前一个mip纹理,使用平均滤波器创建当前mip纹理
for (int x = 0; x & tmipmaps[mip_level]-& x++)
&&&&&&& for (int y = 0; y &
tmipmaps[mip_level]-& y++)
&&&&&&&&&&& {
//需要计算4个纹素的平均值,这些纹素在前一个mip纹理//中的位置如下:
&&&&&&&&&&& // (x*2, y*2), (x*2+1, y*2),
(x*2,y*2+1), (x*2+1,y*2+1)
&&&&&&&&&&& //然后将计算结果写入到当前mip纹理的(x,y)处
&&&&&&&&&&& //提取每个纹素的R,G,B值
&&&&&& &&&&&//计算平均值,并考虑gamma参数
&&&&&&&&&&& //根据5.6.5格式,对R,G,B值进行截取
&&&&&&&&&&& //写入数据
&&&&&&&&& &&} // end for y
&&&&&&& } // end for x
} // end for mip_level
//让mipmaps指向指针数组
*mipmaps =
(BITMAP_IMAGE_PTR)
//成功返回
return(num_mip_levels);
} // end Generate_Mipmaps
&&&&&&&&&&&&&&&&&&&&
5,&&& 结语:
随着三维地图引擎技术在国内的迅猛发展,地图引擎市场逐渐成为一个新兴的增值亮点,掌握引擎的核心开发技术将是广大开发人员的必修课,希望本文对三维地图引擎系统的软件设计构架和对应算法的研究能够起到一定的抛砖引玉的作用。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:43222次
排名:千里之外
原创:25篇
评论:43条
(1)(1)(1)(3)(1)(1)(1)(4)(1)(2)(3)(2)(5)(1)}

我要回帖

更多关于 三维实体建模 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信