加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

KML的生动体现:三维建模实例与SketchUp的应用

(2010-10-20 17:47:49)
标签:

kml

三维建模

sketchup

it

分类: 计算机网络

    1. 概述

    KML的一个重要的应用方向就是三维建模。三维建模的基础就是XML技术的推广。KML语言也是一种类似XML的语言,通过KML所建立的模型遵循COLLADA技术规范。打开KML模型文件的文件夹,会发现一个*.dae文件,这是一个XML格式的文件,里面包含了XML定义的有关二维/三维模型各个地理对象的ID、脚点的相对位置、比例、大小、颜色、引用的材质图片位置等信息,这些信息被XML描述,并被封装成一个DAE文件,最终被另一个KML脚本文件调用,并显示在Google Earth或者Google Maps界面上。

    通常情况下,基于Google Earth或者Google Maps的建模,有以下n种方法:

    手工编辑 KML脚本文件。

    采用AutoCAD或者3ds max等建模工具。建模之后,再通过第三方转换工具转换成    KML/KMZ文件。

    采用支持Google地图直接建模的工具建模,例如Google SketchUp等工具。

    Google Earth上直接绘制。

    2. 建模

    我们即将介绍的这个例子就是利用 Google SketchUp 工具建模的,然后导出成为

KML/KMZ文件。选择使用 SketchUp的原因在于可以边建模,边在Google Earth上观看模型摆放的效果,而且操作也不是很难,容易上手。关于Google SketchUp的具体操作,我们在以后的段落中会详细介绍。

    利用SketchUp建模的具体操作步骤如下。

    首先要确定将构筑模型的长宽比例,最好在草稿上先用铅笔勾勒一个大致的三维透视图,并且确定一下你需要显示的长、宽、高。在 KML调用三维模型的时候,可以通过如下代码:

x> 1< x>

y> 1< y>

1</ z>

Sca e>

在以上KML代码中,用户可以通过<Scale>节来调整比例,但是如果需要构筑的模型不止一个,那么可以事先做好大致的一个图框。

    然后需要做的就是将你头脑中的模型实施到 SketchUp上去。SketchUp 素有建筑草稿纸的称谓,熟练的用户几乎可以随心所欲地使用简单命令来构筑三维模型。SketchUp跟许多其他的主流三维建模软件不太一样的地方就是构图的主界面,像3ds maxMaya等著名建模软件的建模主窗口通常会有4个子窗口,其中3个子窗口表示三维构建模型的3个面 (表示模型的正视、侧视、俯视)。而Google SketchUp则提供了一个灵活的透视模拟窗口,更加接近人的观察效果,没有经过严格绘图训练的用户也能很快适应。

    Google SketchUp还提供了一个很有用的功能——素材资料库。这个资料库是个在线的网络资料库,处于不断地更新之中,有各种KML/KMZ的模型文件,看到需要引用的模型时,可以直接单击后下载。

三维模型的资料窗口其实是一个Web浏览器页面,可以通过这个窗口连接到 Google的官方网站获取资源。

    用户也可以采用 IE 浏览器的登录方式http1/sketchup.google.com/3d warehouse/

    这个网点就有上面的资料窗口所引用的内容。

    SketchUp提供了几个基本构件元素,例如方形、圆形、圆弧、线条。这些基本的元素是构成复杂图形的基础,按钮是SketchUp工具栏的一部分。

    线条可以作为建筑物的基准线,方形可以作为建筑物的主体,圆形可以作为特殊装饰线甚至作为绘制复杂图形的辅助线。使用的基本原则与手工在草稿纸上绘图相同,运用这些基本元素需要用户具有一定的绘画技巧。至于基本图形元素工具的使用,这 不做详细介绍。    SketchUp 还有另一个比较实用的功能,就是拉伸工具。这个功能可以将平面图形拉伸成三维立体模型。例如楼梯的构造,就无须每层都绘制一个三维长方体,只需要绘制一个侧面,然后拉伸即可。

    伸工具的使用非常方便。首先绘制一个基本平面形状。然后再使用拉伸工具针对这个形状拉伸。由于是三维空间,所以用户往上下两个方向拉伸都可以。拉伸相当于赋一个高度值给这个长方形,使得长方形成为长方体。

    拉伸功能有自动锁定的功能,该功能会智能判断鼠标当前所处的立面,然后锁定目前的立面作为拉伸面,锁定后用户单击鼠标就可以了。有时候会发生错误锁定的情况,不一定能够确定所要的拉伸面。这时有个技巧,通过鼠标滚轮可以进行缩放,放大到自动锁定需要拉伸的面的状态。

另一个体现 SketchUp 三维透视功能的工具是旋转工具。通过旋转主画板窗口上会呈现不同角度的透视效果,通过旋转,可以看到不同的透视视角。

3. 构造房屋

    前面介绍了SketchUp建模的优势,就是和Google Earth结合紧密,可以直接将模型部署到Google Earth卫星图片上,并且也可以以三维的方式展现出来。这一点极大地方便了城市规划、建筑设计等专业人员对建筑物设计规划的把握,建模无须传统的沙盘,直接在计算机上模拟即可。

    首先构思一下三维建筑物是由几个基本几何图形构成的。因为对于Google SketchUp来说,所有的三维物体都可以用几个最基本的几何图形构成,点、线、面是技基本的要素,而体只是面的拉伸。在Google SketchUp 中首先要确定好三维物体的长、宽、高,这也是任何一个物体所应该具备的。

    这是一座房子的基本模型,有门柱、门廊和屋顶。这些稍微复杂点的模型其实都是通过分解1茨不同的几个部分,然后用最基本的长方形、圆形拉伸后得到的。最后再拼接成一个完整的建筑物模型。

绘制屋顶的结构,就要先绘制一个方形,然后利用拉伸工具拉伸成长方体。通过绘制屋顶的巾脊梁线,产生一个支撑面,此时线条的重要性就凸显出来了。其作用是作为辅助线,然后通过构筑斜面,产生一个基本的屋顶形状。

“拆除”了屋顶覆盖面之后,就可以清楚地看到里面的原有结构了。同样,在门厅的屋顶和柱子也是这样画出来的。

删除了柱子之后,可以看到上下两个面都凹陷出了两个圆形的“j间”,这是因为柱子其实是圆形拉伸后的结果,然后在其上加上门廊屋顶和底座的。

    门廊中的阶梯也是通过弧形和长方形拉伸后得到的,作为弧形和长方形,首先要规划和设计好摆放的位置和各自之间的距离关系,确定楼梯里面的高度,从正面拉伸就可以了。这种绘制的方法是正面拉伸法;绘制楼梯还有一种方法是从侧面进行拉伸,就是先绘制楼梯的侧视固,然后从侧面拉伸楼梯,最终获得类似楼梯的阶段上升的平面。

    整体透视图反映了房子与人的位置关系和比例关系 (这里为了戳图需要特定放大了人,缩小了房子),其实拉伸后的“体”(例如长方体、圆柱体)是空心的。

在内部也可以放置子模型,甚至还可以在本例中的房子里放置家具。

SketchUpGoogle Earth 中都可以进入“体”的内部一探究竟。如图 3-56所示的这幅内部局部观察图,就很好地反映出内部结构的细节。

虽然作为“草稿纸”的SketchUp可能不关注内部的细节,但是作为设计时的参考依据,有时候也要考虑到内部的结构和效果的,可以进入建筑模型内部看看。

    该建筑物模型的组成基本元素包括线条和面,例如直线条、阑弧线条、圆圈、正方形面、长方形面、不规则多边形面等。这些线条和面最终被XML描述,保存成*.dae文件。下面是一个典型的DAE文件代码片段:

?>= ml ver on= encoding= ut >

COL LADA xm1ns ht tp www co lad org COL LAD SChema ver ion= >

ibrary-geomet ries>

    geomet ry id= mesh 17 geomet ry name= mesh 17 geomet ry >

    me sh>

    source id= "mesh 17 -geometry-position" >

    loat-array id= "mesh 17 -geometry-posit ion-array '

    35.360373 503.484049 8.500000 35.190002

    502.189953 8.500000 35.859875 504.689953

    8.500000 36.654468 505.725487 8.500000

    8.500000 40.190002 507.189953 8.500000

    41.484098 507.019582 8.500000 42.690002

    506.520080 8.500000 43.725536 505.725487

    loat-array>

    technic Iue-common>

count= Ilt >

<acceSsor  ource=llllmeshl7—geometry—position—array

cotlSt= str ide=

.1>

    par am name= type loat >

    <param  name "Y”type ="f:Loat"/>

    par am name= type= loa >

    acces sor >

    techniq Lie-common>

soIr ce>

vertices id= "mesh 17 -geometry-vertex >

    input emant p0S '. TION source= {} me sh geomet ry -pos on >

ve >

<lines    material=’,ForegroundColor,’    count =I351>

    <input  semantic =VER'EXsource=”井mesh:L7 -geometry-vertex  offset ="0"/>

    p> 10 11 10 12 11 13 12 14 13 15 14

16   51  16  18  17  19  18  20  19  21  20  22    23  22   23  24  23  25  22  26  21  27  20  28  19  29  18

30  171   16  32  15  33  14  34   </p>

    lines>

    mesh>

    geomet ry>

    </ library-vi sual-scenes >

    scene>

    <instancevistlalscene  url "llSketchUpScene/>

    SCene>

COL LADA>

 DAE 文件的解释显然已经超出了本书讨论的范围,这里就不再赞述了,请参考有关COLLADA协议的资料。

    DAE模型文件对Google Earth的意义很重要,Google Earth的模型协议去执行的。模型建立好之后,需要通过 KML 脚本来加载。加载的是遵从 COLLADA式有许多种,有湿合多个模型的KML脚本,也有单个模型的KML脚本。以下是一个KML调用DAE文件的代码:

xm1 ver on= encodi ng= UTF- >

<kml  xmlns "http//earth.google. c()m/kml/2.1>

F' o1der>

    name> SP review2< name>

这段代码说明了模型是采用 SketchUp建立的:

<description><[CDATA [Created with <a href-http//sketchup. gOogle. com/ ">Goog:Le

SketchUp  6.0.5:L5</a>></description>

以下这段代码定义了观察的角度和位置:

LOOk At >

longi tude>- 10 828 03 04 5</ longi tude>

latitude> 40 017119 47 9671</ lati tude>

altitude> 0915423 16716 16 65 8< a1titude>

range> 52 17 7< range>

tilt> 89.' 88420000000001</ tilt>

heading> 92 6< heading>

L00]< At >

Folder>

longitude>- 10 828103 72 O4 5</ 10ngitude>

latitude> 017119347 69 67 1</ latitude>

altitude> 0915423167 1616 65 8< a1titude>

range> 52 17 57 range>

ti1t> 89.88420000000001</ ilt>

heading> 6< heading>

LOOk At>

Place mark>

Fo lder >

以下是调用模型的代码:

    Place mark>

    name>! ode name>

    <Style  id=”defau:Lt“>

    Sty e>

    <Model  id= "model_3”>

    alt tudeMode> relat iveTOGround< alt tudeMode>

    Locat ion>

    longi tude>- 105 </ longi tude>

    at tude> 17</ at tude>

    alt tude> 0< alt tude>

    Locat ion>

    Or ientat ion>

    heading> 0< heading>

tilt> 0</ tilt>

    ro1 I> 0< ro11>

    Orientjit ion>

Scale>

x> 1< x>

y> 1< y>

z> 1</ z>

Scale>

这里是调用在根目录files子目录下的SPreview2.dae模型文件

Link>

href> files/ SP review2 dae< href>

Link>

    Mode 1>

</Placemark>

Google SketchUp建模的代码如下:

Do curnent Sour ce Sket chUp< Document Source>

Fol1der>

.( kn1>

    然后利用“Get Current View”和“Place Model”这两个功能将模型“放置”到Google Earth的卫星图片上,然后就可以在Google Earth上配合地形和建筑物周边的地貌进行观察,并在不断地修改后进行部署。如此循环,直到得到一个满意的建筑模型为止。

SketchUp的这种智能部署三维模型的功能,其实原理是通过生成KML/KMZ文件,然后通过调用Google Earth加载的。

    本例以一个三维的建筑物模型为例子,从构思到如何使用 Google SketchUp来建立模型都做了深入的探讨。通过建模工具结合KML语言调用,最终展示在Google Earth地图之上,完成了一个实用的建筑物建模规划的微型项目。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有