在近几年里,用于汽车导航系统的三维地图显示技术得到了发展,已经可以在汽车导航屏幕上显示三维地图。这样,通过汽车导航系统,用户能够以三维方式知道当前
位置与诸如周围建筑和十字路口的三维结构的关系。
同样,在诸如
个人数字助理(PDA)和便携式电话的终端上已经安装或可选地安装用于了解当前位置的全球
定位系统(GPS)。因此,用于引导持有这种终端的用户从当前位置去往其目的地的步行导航系统已经投入实际使用。
而且,能够通过
硬件实时高速地在这种便携式终端的屏幕上绘制(render)三维图形的三维图形绘制引擎最近已经投入实际使用,甚至在便携式终端上也能够高速绘制图形。
硬盘也可以安装在汽车导航装置上。同样,外设大容量
存储器,如Memory Stick(Memory Stick(记忆棒)是索尼公司的注册商标),可以安装在诸如PDA的便携式终端上。大量的数据,如三维地图数据,被存储在这样的存储器中,使得可以高速
访问这些数据。
布景图(scene graph),显示三维图形的一种技术,用于绘制有复杂结构的物体。
图33A和33B显示了利用布景图构造的物体的例子。图33A显示了作为物体的三维
机器人140,图33B显示了构造该物体的部分。
图34显示了呈现图33A所示物体的结构的布景图的例子。
图35显示了构成用布景图呈现的物体的部分的配置。
例如,为了表现图33A所示的机器人140,预先定义了用作头或身体的部分141、用作胳膊的部分142、用作腿的部分143,而部分ID,如“1”、“2”、和“3”,被分别分配给部分141、142、和143,以进行管理,如图33B所示。这些部分的位置关系从一个根来描述,从而每一部分都在缩放比例、旋转、平移(translation)方面以此顺序转换,如在图34的布景图中所定义。
从而,例如,如图35所示,表现并绘制(render)机器人的头141a、身体141b、左臂142a、右臂142b、左腿143a、和右腿143b。
通常,有多种用于描述布景图的格式和多种用于管理布景图的应用编程
接口(API)可用。Softimage公司的
虚拟现实造型语言(VRML)和XSI(商标)是典型的格式。已知Java3D(注册商标)和OpenInventor(商标)是能够管理布景图的API。
一种能够在布景图中用K维树结构(更具体的,6维树结构)定义三维
建筑物以便于搜索的数据保持方法已经被公开,例如,在公开号为10-293862的日本未审批
专利申请中(图14)。
相反地,尽可能精确地实现高速绘制而不降低三维物体外形轮廓的详细度级别(level ofdetail)(LOD)技术已经被使用。
图36至38说明了LOD技术的例子。
例如,如图36所示,根据LOD技术,为要绘制的物体预先准备多个详细度级别,如物体150为级别1,物体151为级别2,而物体152为级别3。为了绘制,根据与观察点(摄像机155的位置)的距离选择处于最合适的详细度级别的物体。
例如,对于与摄像机155非常接近的物体,绘制级别1的物体150;对于与摄像机155距离较远的物体,绘制级别2的物体151;对于与摄像机155距离非常远的物体,绘制级别3的物体152。因此,与必须为任何位置的任何物体绘制全部数据的常规技术相比较,通过引入LOD技术,可以实现了为远离摄像机的物体绘制简化数据,而为位于摄像机附加的物体绘制详细数据,如图38所示。这样,由于可以在不降低三维物体的外形轮廓的情况下减少图形绘制引擎的负担,所以可以提高绘制速度。
为了在通信期间实时发送和绘制三维数据时避免
帧下降(framedropping),在公开号为2002-279449的日本未审专利申请公开(第0072段至第0077段)中公开了一种通过采用LOD技术根据详细度级别对物体分类并通过延迟绘制细节部分而以帧频避免帧下降的方法。
有许多种LOD技术,一种四叉树结构(quadtree structure)被广泛用作适用于具有类似三维地图的结构的物体数据的技术。
按照该技术,在特定平面如三维地图上广泛分布的三维数据,通过根据物体的详细度级别分入处于多个等级级别的
节点,而被记录,并且在每个等级级别上每个节点被分成四个节点。
图39至41说明了四叉树结构。
在图39中,原始数据160被分到三个等级级别上的节点,如节点161的级别1具有大物体;节点162的级别2具有中等大小的物体;而节点163的级别3具有小物体,在每个等级级别上每个节点被分成四个节点。从而,可以通过执行对每个节点的绘制来实现LOD,使得为接近观察点的物体绘制高详细度级别的节点,而为远离观察点的物体绘制低详细度级别的节点。
例如,如图40所示,如果与摄像机170的距离超过
阈值(远平面)171,则不执行绘制。如果与摄像机170的距离在阈值171和阈值172之间,则绘制仅在最低详细度级别的节点的地图。如果与摄像机170的距离在阈值172和阈值173之间,则绘制第二低详细度级别的节点的地图。如果与摄像机170的距离在阈值173和阈值174之间,则绘制第三低详细度级别的节点的地图。如果与摄像机170的距离在阈值174和阈值(近平面)175之间,则绘制最高详细度级别的节点的地图。如果与摄像机170的距离低于阈值175,则不执行绘制。
图41显示了怎样实现LOD四叉树结构。首先,假定存在
覆盖例如地表面的二维宽平面内构成的整个数据空间的正方形180,正方形180被分成四个相等的分平面(divided surface)180a、180b、180c、和180d。多个分平面延伸的组成部分181和182被认为是广泛延伸的巨大组成部分。因此,组成部分181和182存储在较高等级级别的节点190。提供对应于各分平面180a、180b、180c、和180d的节点191a、191b、191c、和191d,作为较低等级级别的
子节点,并且将其它组成部分归到相应的子节点。
通过根据需要重复这样的处理,地图可以根据详细度级别分级构成。
具体地,当该方法应用于三维地图时,该地图可以自动分级构成(虽然用于定义等级级别边界上的物体是例外),如最高等级级别的节点用于存储在广域扩展的山脉、海洋、道路;较低等级级别的节点用于存储如建筑物的大结构;而最低等级级别节点用于存储房子、
信号灯、交通标志等等。因此,可以采用LOD技术有效地绘制三维地图。
对于以最近已经变得很常见的三维汽车导航系统来代表的各种三维导航系统,三维地图必须以高精确度高速实时绘制。然而,用众所周知的布景图来表现三维地图需要处理极大量的数据,这使得难以进行高速处理。
另外,在众所周知的四叉树结构中,作为地标的高大建筑很可能被分到针对小物体的节点。这样,远离观察点的高大建筑即使在实际可见时也可能被忽略。为了避免这种情况,需要诸如绘制包括高大建筑的节点的处理。然而,这种用于确定节点是否包括高大建筑的处理降低了绘制速度并使数据省略的重大意义降级。
另外,不仅需要高速绘制,而且需要显示适于地标的关注点(POI,pointof interest)信息,例如地图上用户
指定的建筑物。
本发明的实施例将参考附图进行描述。
图1是根据本发明实施例的地图显示系统10的功能的功能方框图。
地图显示系统10包括:地图数据处理部分10a,用于处理由地图制作公司等提供的原始地图数据和原始POI信息,其包括由地图制作公司或各种信息提供公司提供的有关地图中特定POI的信息;地图数据显示部分10b,用于基于处理信息执行显示处理。
地图数据处理部分10a包括:原始三维地图
数据库11,用于存储原始三维地图数据;地图处理单元12,用于把原始三维地图分成用树结构表示原始三维地图的结构的布景图数据和绘制包括在三维地图中的物体的绘制数据,并用于处理该布景图数据和该绘制数据;原始POI信息数据库21,用于存储原始POI信息;和POI信息处理单元22,用于处理该原始POI信息。
另外,该地图数据显示部分10b包括:布景图数据库13,用于存储由地图处理单元12分类的布景图数据;三维地图数据库14,用于存储绘制三维地图所需的绘制数据;当前位置指定单元15,用于指定当前位置;布景图管理单元16,用于管理布景图数据;摄像机位置设置单元17,用于在三维地图中设置观察点和视线;显示区域指定单元18,用于通过以基于要绘制的三维空间中的观察点和视线数据,参考布景图数据,来指定显示区域;数据读取单元19,用于根据来自三维地图数据库14的指定显示区域读取绘制数据;显示处理单元20,用于基于所读取的绘制数据执行显示处理;和POI信息数据库23,用于存储在POI信息处理单元22中处理过的POI信息。
图2显示了由地图处理单元12分类的数据结构的例子。
在布景图数据库13中存储的布景图数据中,用树结构来描述原始三维地图数据库11中的整个广域地图的数据结构。虽然一般的布景图数据可以应付(manage)多种树结构,但这里所用的布景图数据在功能上是专用于地图的。这样,该数据结构可以被简化,并且处理速度可以提高。
这里所用的树结构根据三维地图的详细度级别有处于多个等级级别的节点。处于最高等级级别的节点用于显示最低详细度级别。节点的等级级别越低,所显示的详细度级别就越高。
如图2所示,本实施例中的布景图数据结构专用于四叉树结构。换句话说,用每个节点在各个等级级别被分成四个节点的结构来描述广域三维地图。
用可扩展
标记语言(XML)来描述这样的树结构有助于进行编辑和浏览。
相反地,以顺序执行数据格式,更具体地,使用以一一对应关系与绘制三维地图所需的三维绘制API的绘制指令相对应的二进制数据,而不使用诸如材料几何(material geometry)的常用结构数据,来写入用于绘制三维地图中包括的建筑物和地形(在下文中,称为物体)的绘制数据。从而,将数据转换成绘制指令所花费的时间的减少提高了绘制速度,而用二进制数据来描述减小了数据大小。
绘制数据和用四叉树结构划分的地图区域相关联,下面将进行描述,多个绘制数据段被记录在三维地图数据库14中。
现在对图1所示的地图显示系统10的操作进行描述。
在地图数据处理部分10a中,从原始三维地图数据库11中捕获(capture)原始三维地图数据。地图处理单元12把原始三维地图数据分成布景图数据和绘制数据,布景图数据和绘制数据被分别存储在布景图数据库13和三维地图数据库14中。同样,从原始POI信息数据库21中捕获原始POI信息。POI信息处理单元22处理要存储在POI信息数据库23中的原始POI信息。
然后,在地图数据显示部分10b中,当前位置指定单元15在地图上指定当前位置。基于这个信息,布景图管理单元16从布景图数据库13中读取布景图数据的结构。
布景图管理单元16把关于布景图数据读取结构的信息发送到显示区域指定单元18。显示区域指定单元18从摄像机位置设置单元17获取要绘制的三维空间中的观察点和视线数据,并根据指定的当前位置以及观察点和视线数据,参考布景图数据,指定显示区域。在这里,如果布景图数据采用四叉树结构,如图2所示,通过考虑空间中摄像机的位置和布景图数据中每个节点的位置,指定显示区域(指定显示区域的细节将在下面描述)。数据读取单元19根据指定的显示区域从三维地图数据库14中读取绘制数据,而显示处理单元20执行用于在屏幕上绘制的显示处理。
另外,如果用户需要表示有关POI如屏幕上显示的特定建筑物的信息,将适用于由用户指定的物体的POI信息从POI信息数据库23发送到数据读取单元19,并与地图一起显示。
将通过采用下面描述的导航系统对根据本发明实施例的地图显示装置进行描述。
图3示意地显示了根据本发明实施例的导航系统的结构。
这样的导航系统包括汽车导航装置30和全球定位系统(GPS)31的组合或安装有步行导航装置的便携式终端40(如个人数字助理(PDA)或
移动电话)和GPS41的组合。在这样导航系统中,在诸如
阴极射线管(CRT)或
液晶显示器的显示设备的屏幕50上显示以图3所示当前位置为中心的
鸟瞰三维地图。
这样的导航系统可以用来显示以当前位置为中心的城镇景观,以及用来显示用于模拟路线(course)的运动的运动图片,从而在GPS 31或41指示的位置的
基础上向用户提供从指定出发点到目的地的导航。
图4显示了根据本发明实施例的导航系统的硬件结构的例子。
该导航系统包括GPS 60、信息处理设备61、显示设备62、外部存储设备63、和外部输入设备64。信息处理设备61包括3D图形绘制引擎61a、
随机存取存储器(RAM)61b、
只读存储器(ROM)61c、中央处理单元(CPU)61d、和对外部设备的接口61e。
GPS 60用于获知当前位置。
3D图形绘制引擎61a是能根据来自CPU 61d的指令在显示设备62上显示各种类型文本和图形如三维图形的硬件。
RAM 61b临时存储CPU 61d将要执行的程序和要计算的数据。
ROM 61c存储CPU 61d将要执行的基础程序和数据。
三维图形API,例如Open-GL(注册商标),存储在RAM 61b或ROM 61c中,其将绘制指令发送到3D图形绘制引擎61a,并且是实现三维图形的绘制所必需的。
CPU 61d根据RAM 61b或ROM 61c中存储的程序控制信息处理设备61的每个单元。
接口61e控制GPS 60、外部存储设备63、外部输入设备64、和CPU 61d之间的信息输入和输出。
显示设备62是,例如,CRT或液晶显示器。显示设备62在屏幕上显示由3D图形绘制引擎61a处理过的
视频信号。
外部存储设备63是,例如,光盘只读存储器(CD-ROM)、数字化通用盘(DVD)、硬盘
驱动器(HDD)、或Memory Stick(注册商标)。各种类型的信息,例如地图,存储在外部存储设备63。
外部输入设备64是,例如,汽车导航装置的远程
控制器、PDA屏的
触摸板、或各种按钮。外部输入设备64把用户控制导航系统所需的信息发送到CPU 61d。
现在对这样导航系统的操作进行示意性说明。
当CPU 61d执行RAM 61b或ROM 61c中记录的导航程序时,根据从GPS 60或外部输入设备64获取的信息,从外部存储设备63通过外部设备接口61e读取相应区域的地图信息,并把该地图信息写入RAM 61b。当CPU61d执行地图绘制程序时,根据该信息把地图绘制指令发布到三维图形API。然后,根据该指令,绘制信号被发送到3D图形绘制引擎61a,在显示设备62上显示该地图。
在图4所示的导航系统中,外部存储设备63中记录的地图信息对应于图1中所示的布景图数据库13、三维地图数据库14、和POI信息数据库23。另外,图1中所示的当前位置指定单元15、布景图管理单元16、摄像机位置设置单元17、显示区域指定单元18、数据读取单元19、和显示处理单元20作为由CPU 61d执行的指令组记录在图4中所示的RAM 61b或ROM 61c中。
图1中所示的地图数据处理部分10a是,例如,个人计算机(PC),并包括存储设备,用于记录原始三维地图数据库11和原始POI信息数据库21,虽然没有对这些进行图解。另外,例如,地图数据处理部分10a包括CPU。在CPU的控制下,地图数据处理部分10a把原始三维数据分成布景图数据和绘制数据,并处理该布景图数据和绘制数据。
现在描述由地图数据处理部分10a分类和处理的布景图数据和三维地图绘制数据。
图5显示了布景图数据的结构的例子。
这里,布景图数据专用于四叉树结构。
在布景图数据中,完整的地图70被分成多个区域71。每个区域71用经度和纬度来定义。在图5所示的例子中,一个区域71描述为由用西北经度和维度72a表示的西北边缘的经度和纬度和用东南经度和维度72b表示的东南边缘的经度和纬度指定的区域。用具有四叉树结构的节点73的树来描述表示该区域的地图结构。使得节点73具有四个子节点76的结构一直重复,直到达到四叉树等级级别的设定数目。在下文中,节点树的等级级别将用术语“级别”来表示。作为根的节点73的级别被定义为级别1,四个子节点76中的每一个的级别被定义为级别2,每个子节点76的子节点的级别被定义为级别3,等等。
除了子节点76之外,组成节点73的组分是节点73的三维地图数据的文件名(File3D)74和多个物体75,例如地图上存在的建筑物和道路。
图6显示了一个物体75的数据结构的例子。
一个物体75包括物体名称77、一个作为POI的物体75的ID POIID 78、指示一个物体75的标志79、和关于一个物体75的边界框信息80。
图7说明了一个物体75的POIID 78。
该POIID 78指示了POI信息数据库23中的POI信息23a的ID。例如,如果一个物体75表示东京塔,则POIID 78表示POI信息数据库23中关于东京塔的POI信息23a。
图8说明了一个物体75的标志79。
标志79表示三维地图的绘制数据中对应于在其中描述关于这一个物体75的数据的这一个区域71的一部分中记录的标志的ID。例如,如果对应于图5所示的一个区域71的三维地图的绘制数据是由三维地图数据库14中存储的文件名74指定的用于三维地图的绘制数据14a,如图8所示,则与这一个物体75的数据相对应的绘制数据14a中的绘制区域14a-1中预先描述的标志的ID由在布景图数据中的标志79指定。
图9说明了物体75a和75b的边界框信息80。
边界框信息80包括覆盖物体75a和75b各自所在区域的立方体的坐标(coordinate)81a和81b,如图9所示。坐标81a和81b是用来获知物体75a和75b之间的空间位置关系的数据。
根据以上详细描述,布景图数据可以如下所示以XML格式来写出。
图10显示了用布景图数据描述的地图。
图11显示了以XML格式写出的布景图数据的例子。
在图10中,表示东京市区及郊区(Greater Tokyo Area)的地图82被分成多个地图区域83。多个地图区域83与从图5所示地图70中划分出的多个区域71相对应。例如,表示Ota-ku的西北部分的地图区域83以XML格式写出,如图11所示。
现在根据图5所示的布景图数据对图11中的描述进行说明。
″Northwest Part of Ota-ku″被描述为一个区域71。然后,以西北经度和纬度72a和东南经度和纬度72b来指定经纬度。然后,″otaku-NW-root″被描述为文件名74,其中描述了关于对应于三维地图的绘制数据。然后,指定多个物体75。
每个物体75的数据结构如图6所示配置。在图11所示的例子中,″JROmori Station″、″Omori Police Station″等,以名称77来描述。为每个物体75描述POIID 78、标志79、和边界框信息80。例如,对于以描述″JR OmoriStation″作为名称77的一个物体75,提供了描述″<Object Name=″JR OmoriStation″POIID=″JR_OmoriStation″Tag=″1″Bbox=″12,100,5,30,5,40,...″/>″。上面的描述意思是对″JR Omori Station″的绘制数据记录在″otaku-NW-root″中提供了标志1的那部分中。
每个区域71根据图5中所示的四个子节点76被分成四个区域。对每个区域描述文件名和多个物体,如上所述。在图11中所示的例子中,″otaku-NW-01″、″otaku-NW-02″、″otaku-NW-03″、和″otaku-NW-04″作为文件名而被描述。从而,控制了子节点76的三维绘制数据的位置。
现在参考图12对用于三维地图的绘制数据的结构进行描述。
例如,在地图数据处理部分10a中的CPU的控制下,以二进制格式写绘制数据。绘制数据的内容被大致分成地图信息段84、载入信息段85、和运行时间信息段86。
现在描述每个组成绘制数据的段。
图13说明了地图信息段84的细节。
地图信息段84包括绘制三维图形的右手
坐标系统的三维空间内以及由经度和纬度表示的地图体现的真实空间内的缩放比例信息。更具体地,通过用由X-、Y-、和Z-轴定义的一般三维右手坐标系统,地表面在XZ-平面87上表现。地图信息段84包括在空间地图区域展开(develop)的三维地图的绘制数据的左上端点88和右下端点89的坐标。地图信息段84还包括分别对应于真实区域90的西北端点和东南端点的坐标91和92的经度和纬度。为了绘制,根据这些信息执行缩放。
图14说明了载入信息段85的细节。
载入信息段85包括表示物体外观的材料、纹理(texture)、和
颜色的信息列表。在这里定义了多种材料、纹理、和颜色,它们按照定义的次序编号直到定义的数目。
在材料列表中,用RGB或RGBA格式指定表示材料外观的环境颜色、漫射颜色、反射颜色、和
辐射颜色。材料列表还包括表示光的反射的反射系数。在材料列表中定义了多种颜色。
纹理列表包括要附加到三维物体上的图像,如建筑物的墙面。真实纹理记录在图1所示的三维地图数据库14中,作为用原始或公知的图像格式,如联合摄影编码专家组(JPEG)格式或图形交换格式(GIF),记录的图像数据。纹理列表包括图像的文件名。
颜色列表包括以RGB或RGBA格式写的物体颜色。
图15说明了运行时间信息段86的细节。
图12所示的运行时间信息段86包括用于绘制三维地图的绘制指令和用于提供绘制指令所在区域的ID的标志指令。标志指令用于指定嵌入在地图中的物体的绘制区域,如地图中的特定建筑物和道路。标志指令还指定该标志的ID和区域。该段中嵌入了多个标志指令。标志的ID对应于在布景图数据中指定其ID的物体的标志。
绘制指令大致分为绘制开始指令、矩阵变换指令组、矩阵推进(push)和取出(pop)指令、材料指定指令、纹理指定指令、颜色指定指令、法线指定指令、纹理
顶点指定指令、顶点绘制指令、和绘制终止宣告指令。这些指令对应于诸如Open-GL的一般三维图形库的基本绘制指令。
现在对上面提到的每个绘制指令进行描述。
绘制开始指令宣告三维图形的绘制开始,并宣告所用的图元的类型。
图16A至16J显示了图元的例子。
术语“图元(primitive)”指要绘制的多边形的类型。图元由顶点v0、v1、v2等等来指定,如图16A中的点、图16B中的线条、图16C中的线条带(strip)、图16D中的线路回路、图16E中的三
角形、图16F中的三角形带、图16G中的三角形扇、图16H中的四边形、图16I中的四边形带、和图16J中的多边形(N边多边形)所示。
绘制开始指令对应于Open-GL的glBegin()指令。同样地,绘制终止宣告指令对应于Open-GL的glEnd()指令。根据绘制开始指令和绘制终止宣告指令之间提供的顶点绘制指令,在三维空间绘制多边形。
图17A至17D说明了矩阵变换指令组。
矩阵变换指令组被提供用于三维空间中的矩阵处理,如在空间中绘制的物体向原点的移动、平移、旋转、和缩放,分别如图17A至17D所示。当执行这样的指令时,设置当前物体的参数,如要绘制物体的位置、相对于坐标轴的旋转角、和缩放因子。而且,这些指令可以组合。
向原点移动、平移、旋转、和缩放的指令分别对应于Open-GL的glLoadIdentity()指令、glTranslate()指令、glRotate()指令、和glScale()指令。
矩阵推进和取出指令用于存储或恢复用于当前物体的矩阵变换指令的参数。矩阵推进和取出指令对应于Open-GL的glPushMatrix()指令和glPopMatrix()指令。通过它们的组合,可以绘制树上的布景图结构。
材料指定指令、纹理指定指令、和颜色指定指令指定由载入信息指定的材料、纹理、和颜色的ID作为物体当前的外观、纹理、和颜色。
法线指定指令、纹理顶点指定指令、和顶点绘制指令在绘制开始指令和绘制终止宣告指令之间分别指定用于为了写入而进行计算的法线(normal)、纹理顶点的坐标、和空间中指定图元的顶点。
图18说明了法线指定指令。
为要绘制的表面93和顶点v0、v1、和v2指定法线n0、n1、和n2。
图19说明了纹理和纹理坐标。
在纹理顶点指定指令中,根据由纹理指定指令预先指定的当前图像,从由载入信息段85预先指定的纹理图像94中指定要附到表面95上的部分的坐标t0、t1、t2、t3,并给出附着图像的指令。
类似地,为指定的顶点和表面指定由颜色指定指令指定的当前颜色。
同样地,顶点绘制指令指定当前图元的顶点坐标。
下面将描述这样以二进制格式写出的绘制指令。
图20显示了以二进制格式写出的绘制指令的例子。
每个指令的基本长度有取决于基本段长度的固定字节数。例如,如果段长度是2字节,则定义指令的基本段(指令单元段)96的单元是2字节。另外,为了表示指令所需的多个参数,除了指令单元段96之外,还定义了参数单元段97。指令单元段96和参数单元段97被分离配置,因为与类型有限的绘制指令不同,数据通常需要有4字节或更多字节来表示真实的数目,如空间坐标。
根据特性,绘制指令被分成1段指令和2段或更多段指令,如图20所示。2段或更多段指令有含指令单元段和两个或更多个参数段的结构。
例如,不需要任何参数的绘制终止宣告指令是1段指令。由2段指令载入信息段85设置的具有图元类型参数的绘制开始指令以及分别具有作为材料、纹理、和颜色指标的参数的材料指定指令、纹理指定指令、和颜色指定指令是2段指令。
另外,具有两个参数如纹理图像的坐标(二维XY坐标)的纹理顶点指定指令、以及虽不是绘制指令但也有标志的ID和长度参数的标志指令是3段指令。另外,具有三个参数如三维空间坐标的顶点指定指令是4段指令。参数的数量是根据指令的类型和需要来确定的。
原始POI信息也同样被处理,使得添加了对应于与每个物体75相关联的POIID 78的ID,如图6所示。
如上所示,由地图数据处理部分10a处理后的布景图数据、绘制数据、POI信息等被提供给图4所示的导航系统,并被记录在外部存储设备63中。由地图数据处理部分10a处理的数据可以记录在CD-ROM或DVD上,以用来提供。可选择地,数据可以通过诸如因特网的网络来提供。
虽然可以通过实时顺序下载,在导航系统上显示纹理图像,以便不引起帧下降,但是优选地是,根据处理速度等在使用之前把数据记录在导航系统的外部存储设备63中。
如上所述,在本实施例中,由于为图4所示的导航系统中使用的具有处理速度较慢的CPU 61d的信息处理设备61,而预先执行了用于减少计算量的数据处理,所以可以减少导航系统的处理负荷。
现在描述由图4所示的导航系统执行的处理的细节。
现在参照图21所示的流程图描述读取三维地图的绘制数据的处理。
稍后将对利用布景图数据的全部处理进行描述。
当读取三维地图的绘制数据的处理开始时,在CPU 61d的控制下,通过接口61e从在三维地图数据库14中描述并记录在外部存储设备63中的绘制数据中读取地图信息段84,获取要为其绘制地图的区域,并记录在RAM 61b中(步骤S1)。
然后,执行载入信息段85的读取和记录。这里,在CPU 61d的控制下,图14所示的材料数据被读取和记录在RAM 61b中(步骤S2),从纹理数据中读取所需纹理的文件名,并将其载入,以记录在RAM 61b中(步骤S3)。然后,
颜色数据被读取和记录在RAM 61b中(步骤S4)。
读取运行时间信息段86(步骤S5),确定是否出现了标志指令(步骤S6)。如果出现了标志指令,则将标志的位置、ID、和长度记录在RAM 61b中(步骤S7),处理进入步骤8。如果没有出现标志,则将所读取的运行时间信息记录在RAM 61b中(步骤S8)。CPU 61d确定整个运行时间信息段86的读取是否已完成(步骤S9)。重复从步骤S6起的处理步骤,直到已读取了整个运行时间信息段86。当已读取了整个运行时间信息段86时,终止读取三维地图的绘制数据的处理。
现在参照图22和23所示的流程图介绍绘制标准三维地图的处理。
当绘制三维地图的处理开始时,访问RAM 61b中的运行时间信息段86的第一地址。获取运行时间信息(步骤S10),并读取第一绘制指令段(步骤S11)。然后,确定是否设置了矩阵相关指令,如矩阵变换指令或推进和取出指令(步骤S12)。如果设置了矩阵相关指令,则在必要时获取参数(步骤S13),执行该指令(步骤S14)。读取下一个指令段(步骤S15),处理进入步骤S16。从而,预先定义要绘制的图元的当前位置、缩放比例、旋转等。如果没有设置矩阵相关指令,则处理进入步骤S16。
在步骤S16中,确定是否给出了图元开始指令。如果给出了图元开始指令,则获取表示指定图元类型的参数(步骤S17),并将其设置为当前图元(步骤S18)。然后,在图23中处理进入步骤S19。如果没有给出图元开始指令,则处理返回到步骤S12。
在步骤S18中设置当前图元后,要指定的顶点用作指定图元的顶点,直到发布绘制终止宣告指令。例如,如果图元的类型是三角形,如图16E所示,则要指定的顶点以指定顺序用作三角形的顶点。
分别在步骤S19、S22、和S25中执行对是否已读取颜色指定指令、材料指定指令、纹理指定指令的确定。如果已经读取了颜色指定指令、材料指定指令、和纹理指定指令,则分别在步骤S20、S23、和S26中获取表示各自的ID的参数。(分别在步骤S21、S24、和S27)为当前纹理指定设置在载入信息段85中的相应的颜色、材料、和纹理。在指定之后,读取下一个指令段(步骤S38),处理返回到步骤S19。
如果在步骤S19、S22、和S27中,都分别没有读取颜色指定指令、材料指定指令、和纹理指定指令,则确定是否已读取了法线指定指令(步骤S28)。如果已经读取了法线指定指令,则获取法向矢量的参数(步骤S29),并设置当前顶点的法线(步骤S30)。然后,处理进入步骤S38。
如果没有读取法线指定指令,则确定是否已读取了纹理顶点指定指令(步骤S31)。如果已经读取了纹理顶点指定指令,则获取纹理顶点的坐标参数(步骤S32),并设置当前纹理顶点(步骤S33)。然后,处理进入步骤S38。
如果没有读取纹理顶点指定指令,则确定是否已读取了顶点绘制指令(步骤S34)。如果已经读取了顶点绘制指令,则获取顶点坐标参数(步骤S35),并设置图元的顶点(步骤S36)。然后,处理进入步骤S38。例如,如果图元的类型是三角形,则当指定了三个顶点时,绘制包含具有当前纹理、当前材料、或当前颜色的三角形。
重复上述处理,直到出现绘制终止宣告指令。换句话说,确定是否出现了绘制终止宣告指令(步骤S37)。如果确定没有出现绘制终止宣告指令,则在步骤S38中读取下一个指令段,而处理返回到步骤S19。如果出现了绘制终止宣告指令,则调用对应的三维图形API,并向图4所示的3D图绘制引擎61a发布绘制指令(步骤S39)。
重复这样的处理,直到已读取了运行时间信息段86中的所有数据。换句话说,确定是否已经完成对运行时间信息段86的读取(步骤S40)。如果确定已经读取了运行时间信息段86中的所有数据,则绘制处理终止。如果没有读取所有数据,则重复从步骤S12起的处理步骤。
现在描述布景图数据的结构和由使用根据上述处理显示的三维地图绘制数据的导航系统执行的处理。
图24和25显示了由导航系统执行的处理。
首先,在CPU 61d的控制下执行启动系统所需的处理(步骤S50)。稍后将对步骤S50的细节进行描述。
然后,由接口61e接收用户使用外部输入装置64设置的关于观察点的信息,并且在CPU 61d的控制下,该观察点的信息是固定的(步骤S51)。然后,CPU 61d将图5所示的布景图数据的节点树中要搜索的节点的级别L设置为1(=根节点)(步骤S52),用在级别L的节点数替换节点数N(步骤S53)。对于根节点,这个值是1。对于根节点的每个子节点,这个值是4。
然后,把常数I设置为0(步骤S54),把在级别L的第I节点设置为当前节点(步骤S55)。然后,估算当前节点的距离(步骤S56)。后面将说明对距离进行估算的细节。
然后,确定对当前节点距离的估算结果是否在可绘制区域内(步骤S57)。换句话说,如果估算结果在为每个级别设置的阈值内,或者说,如果估算结果小于到边界的距离,如图40所示,则读取对应节点的区域的地图的绘制数据(步骤S58)。然后,常数I加1(步骤S59)。重复从步骤S55起的处理步骤,直到在步骤S60确定常数I达到了在级别L的节点数N。如果常数I达到了在级别L的节点数N,则级别L加1(步骤S61)。重复从步骤S53起的处理步骤,直到在步骤S62确定已经估算了在所有级别的节点。如果已经估算了所有级别的节点,则根据在步骤S58中读取的三维地图绘制数据,通过图21、22、和23所示的处理利用3D图绘制引擎61a绘制三维地图,并显示在显示设备62上(步骤S63)。
现在说明图24的步骤S56中执行距离估算的细节。
因为上述处理所需的距离估算重复多次,所以估算必须以尽可能高的速度来执行。因此,采用下面描述的方法。
图26显示了距离估算所需的要素。
这里,m表示当前级别,坐标(C0、C1、C2)表示要估算距离的当前节点的地表面100上的中心点C。然后,(P0、P1、P2)表示摄像机的位置P,而(V0、V1、V2)表示摄像机的视线矢量V。
此外,当由(V0、0、V2)表示具有与视线矢量V相同的X和Z分量并与XZ-平面平行的矢量V′时,定义具有用作视线矢量V′的垂直线并通过点P的平面101。另外,为用作LOD距离估算的基准的平面称为基准平面S。
另外,d表示从基准平面S到当前地表面100的距离,lm表示从基准平面S到用于确定是否绘制在当前级别m上的地表面的基准线的距离。
参照上述定义,距离估算定义如下:lm>d=|V0(C0-P0)+V2(C2-P2)|/(V02+V22)1/2......(1)更具体地,如果满足公式(1),则绘制该平面上的地图。公式(1)表示从基准平面S到当前地表面100的中心点C的距离。通常,LOD计算仅根据相对于观察点的位置。然而,利用公式(1)的估算对导航三维地图是最有效的。这是因为精确绘制接近屏幕还有观察点(摄像机位置P)的区域的地图是更有效的。另外,这还因为观察点(摄像机位置P)接近地表面100,其中有平行于地表面的视角,或者为导航用的三维地图使用了地表面100和视线矢量V之间为锐角的鸟瞰图。
而且,公式(1)的距离估算把计算的维数限定在二维。这样,可以实现比常规距离估算减少一维的距离估算。所以,计算总量减少了。
这里,一般的,对于CPU 61d执行的计算,加减运算需要较小花费。乘法需要稍高一点的花费,而特别计算,如公式(1)中用到的除法和平方根计算,需要较大花费。因此,通过简单计算,下面描述的同等的估算公式可以从公式(1)通过消除这种沉重负荷而推导出。
lm>dlm2>d2(根据lm,d>0)lm2-d2>0lm2-(V0(C0-P0)+V2(C2-P2))2/(V02+V22)>0lm2(V02+V22)-(V0(C0-P0)+V2(C2-P2))2>0 ......(2)然后,将不需要循环计算的参数预先定义为固定常数。固定观察点后(图24中的步骤S51),对表示地表面的多个节点进行距离估算。这样,在此期间,因为观察点(摄像机位置P)和视线矢量V是固定的,所以表示坐标值的V0和V2也是固定的。这样,(V02+V22)也是固定不变的,在这个阶段把该值设置成常数W。
此外,因为距离lm也是固定的常数,所以对于每个级别m,lm2是固定常数。这里,把lm2定义为Lm。因为该值将一直是固定不变的,所以其在启动系统的处理(图24中的步骤S50)过程中预先定义。类似地,通过将V0(C0-P0)+V2(C2-P2)定义为常数D,得到下面的估算公式:LmW-D2>0 ......(3)图27是说明确定距离估算的处理的流程图。
确定距离估算的处理分布在整个绘制处理过程中,该处理大致分为三个阶段。
在第一阶段中,随着启动系统的处理过程而计算Lm(该计算与图24中的步骤S50相对应)。这里,级别m设置为1(步骤S70),用预先为每个级别m设置的阈值lm的平方替换Lm(步骤S71)。级别m加1(步骤S72),并重复步骤S71,直到在步骤S73确定级别m达到四叉树的级别数。
在第二阶段中,执行观察点固定时的处理。该处理对应于图24中步骤S51中的内部处理。在该处理中,设置摄像机的位置(步骤S74),固定观察点(摄像机点P)和视线矢量V。这样,由于固定了V0、V2、P0、和P2,所以W被计算出来(步骤S75)。
在第三阶段中,对每个节点进行距离估算。该处理对应于图24中的步骤S56中的内部处理。在该处理中,确定绘制区域的节点(步骤S76)。从而,确定了当前地表面100的中心点C。然后,计算D(步骤S77),执行估算公式(3)(步骤S78)。确定结果是真还是假(步骤S79)。如果确定该结果是真,则绘制该节点的地图(步骤S80)。在步骤S81中重复从步骤S76起的处理步骤,直到确定绘制已经完成。如果在步骤S79中确定该结果是假,则处理进入步骤S81。
因此,与利用每次使用估算公式都必须执行两次乘法和一次减法的公式(1)的情况相比较,利用估算公式(3)进行距离估算显著地减少了CPU 61d的负担,从而实现了高速计算。
利用上述布景图数据中的四叉树结构的LOD方法引起下述问题。
一般地,如图41所示,在采用这样四叉树结构的LOD方法中,要估算的区域被机械地划分成四个区域,并根据物体是否在分区域中来构造树中的节点的等级。然而,如果这种方法用于三维地图,那么,例如,由于机械数据划分的LOD处理,可能不在屏幕上显示可以从远处看到的作为地标的物体,如东京塔或其他高大建筑物,即使这样的物体位于可看见的位置。这是因为这样物体不占用大面积的地表面。
下面将描述布景图数据的四叉树结构中添加高度作为要素的情形。
图28说明了添加了高度作为要素的四叉树结构。
尽管通常在四叉树结构中的一个分区域内的物体110被分到较低节点,但是如果该物体110的高度超过了阈值,则将该物体110分到较高节点。
从而,避免了原来不显示能在那个位置上看见的高大建筑物的情形。
下面描述一种在三维地图数据结构中用户指定的点上显示POI信息的方法。
图29说明了用于指明用户指定的建筑物的处理。
例如,当用户用
手指或记录笔在图4所示的显示设备62的屏幕上指定一点时,对应于用户在屏幕120上指定点的点121的坐标表示为(x,y)。这里,根据图6所示布景图数据中描述的与坐标(x,y)交迭的表示建筑物等物体的边界框的投影(projection),投影最接近屏幕的物体作为指定建筑物被指明。在图29所示的例子中,在物体126、127和128中,物体126和128的边界框126a和128a在屏幕120上与坐标点(x,y)交迭。因为边界框126a的位置更接近屏幕,在此例子中,物体126被指定。
现在参考图30所示流程图描述指明用户指定的建筑物的处理。
CPU 61d根据用户使用外部输入设备64等指定的点的信息,指明屏幕上的点的坐标(x,y),如图29所示(步骤S90)。然后,基于指明的坐标(x,y)搜索布景图数据。首先,把当前级别设置为1(步骤S91),获取设置在当前级别的物体的边界框(步骤S92)。将所获取的边界框投影在屏幕上的三维坐标上(步骤S93)。确定边界框是否与用户指定的点(x,y)交迭(步骤S94)。如果边界框与点(x,y)交迭,则将该物体的ID和坐标加入列表,并临时存储在RAM 61b中(步骤S95)。然后,处理进入步骤S96。如果在步骤S94中确定边界框没有与点(x,y)交迭,则处理进入步骤S96。
在步骤S96中,确定是否已经处理了所有物体。如果不是所有物体都已经被处理,则获取在当前级别的下一个物体的边界框(步骤S97),重复从步骤S93起的处理步骤。如果在步骤S96中确定已经处理了所有物体,处理进入步骤S98。
在步骤S98中,确定是否已搜索了所有级别。如果不是所有级别都已被搜索,则当前级别加1(步骤S99),并重复从步骤S92起的处理步骤。如果在步骤S98中确定已经搜索了所有级别,则确定从在步骤S95中加入列表的物体的边界框的坐标中,选择三维空间中最接近的物体,并提取该物体(步骤S100)。
另外,因为所选物体的ID对应于三维地图中的标志,所以可以执行特殊效果绘制,例如仅放大屏幕上显示的所选物体或改变所选物体的颜色。
对于上述三维地图的这种交互,当显示有许多建筑物的市区内的广域地图时,指定特定建筑物可能是困难的。例如,即使用户想在屏幕上指定高大建筑物,当机械地应用图30所示的处理时,因为想指定的建筑物周围有很多小的和中等大小的建筑物,所以可能很难确定用户要指定的建筑物。在图30的步骤S98中,如果把要搜索的布景图数据的级别限定设置成比物体实际所在的级别低的详细度级别,则仅剩下大于预定阈值和高于预定阈值的建筑物。这样,用户可以容易地进行搜索。另外,因为要搜索的物体的数量减少,搜索所花费的时间也减少了。例如,如下所述执行该处理。
图31和32说明了当限定要搜索的级别时对物体的搜索。
如果用户想在图31所示屏幕上指定公园130,因为公园130被多个建筑物131、132、和133包围,很难指定公园130。在这种情况下,因为公园130与建筑物131、132、和133的大小是明显不同的,所以在布景图数据中公园130属于与建筑物131、132、和133不同的级别。这样,通过把布景图数据划分成要搜索的级别和不被搜索的级别,如图32所示,用户可以很容易地指定公园130。也就是说,如果将详细度级别高于预定级别的布景图数据设置成不被搜索,则可以很容易地指定期望的点。