虚拟图书馆海量图书三维立体建模方法

文档序号:6587753阅读:255来源:国知局
专利名称:虚拟图书馆海量图书三维立体建模方法
技术领域
本发明涉及一种建模方法,特别是用于虚拟图书馆海量图书三维立体建模方法。
背景技术
随着全球网络数字化技术的发展和数字资源的快速发展,许多高校都建立了数字 化图书馆,其发展成多种媒体资源、多种系统平台并行运行和多种服务方式共存的开放式 和高复杂度的综合系统。然而,目前全球具有代表性、寥寥可数的高校图书馆虚拟展示介绍都是基于2D形 式来表现的。读者只能从2D查询系统中获得图书所在的书架位置,不能自由地选择观察 点,更不能在3D环境下获取有关图书的封面图片、侧立面、书名、页码及内容等其它信息, 因而限制了读者获取文献信息资源的方式。

发明内容
本发明解决的技术问题是提供一种虚拟图书馆海量图书三维立体建模方法。本发明解决上述技术问题的技术方案是一种虚拟图书馆海量图书三维立体建模 方法,包括建立图书目录数据库数据增长模型、根据图书目录数据库数据增长模型实现图 书目录数据的实时动态同步排架以及“图书级”虚拟现实场景模型建立,其中“图书级”虚 拟现实场景模型建立包括扫描、登记实体图书资料;根据单册图书图片和图书基本属性,建 模生成单册图书模型;逐个生成每册图书,从而形成图书模型数据库;结合图书排架信息、 典藏信息、图书状态和图书基本属性,通过虚拟现实技术依次展示出图书馆图书、物理典藏 地点书架、物理典藏地点虚拟现实场景;最后形成图书馆总体的虚拟现实场景。相较于现有技术,本发明虚拟图书馆海量图书三维立体建模方法具有“图书级”的 虚拟现实,是以图书为单元进行三维立体建模,实现了在架图书的立面、封面、目录和内容 的虚拟现实阅读,最大程度地虚拟了读者在图书馆真实环境中发生的行为,从而建立真正 意义上的虚拟现实图书馆,从根本上解决了图书馆图书资料的一体化管理,形成一个全面 和系统的一站式服务机制。另外,采用“一次建模,N次纹理贴图”的数学方法,有效地解决 了海量目录数据生成三维虚拟图书所需要的巨大数据量而形成的突出矛盾。另外,建立图 书目录数据在虚拟现实情景数据库中的同步映射关系,实现图书目录数据在双数据库中的 同步映射,进而解决动态数据传递、共享与融合等问题。另外,通过建立虚拟现实情景数据 库与图书馆自动化集成管理系统中图书目录数据库的无缝对接,并结合自动排架系统、局 部倒架算法以及相关数据库的操作函数,实现图书排架的自动更新与实时动态同步,从而 确保图书排架信息库而生成的虚拟现实场景和图书馆物理馆藏的图书保持一致性。


图1是本发明虚拟现实图书馆的海量图书立体建模快速生成方法的基于虚拟现 实的图书排架示意图。
图2是本发明虚拟现实图书馆海量图书立体建模快速生成方法的图书虚拟现实 场景数据流程图。图3是本发明虚拟现实图书馆海量图书立体建模快速生成方法部分虚拟书架场 景图。图4是本发明虚拟现实图书馆海量图书立体建模生成方法的基于虚拟现实技术 的图书馆系统平台层次结构。图5是本发明虚拟现实图书馆海量图书立体建模快速生成方法原理框图。图6是本发明虚拟现实图书馆海量图书立体建模快速生成方法中单册图书立体 建模的流程示意图。图7是本发明虚拟现实图书馆海量图书立体建模快速生成方法的图书封面图片 及切片图片示意图。图8是本发明虚拟现实图书馆海量图书立体建模快速生成方法的虚拟现实系统 生成虚拟书与排架流程图。图9是本发明虚拟现实图书馆海量图书立体建模快速生成方法的虚拟现实系统 自动排架程序流程图。图10是本发明虚拟现实图书馆海量图书建模快速生成方法的图书新书上架排架 流程图。图11是本发明虚拟现实图书馆海量图书建模快速生成方法的图书分馆异动排架 流程图。
具体实施例方式本发明虚拟图书馆海量图书三维立体建模方法包括建立图书目录数据库数据增 长模型、实现目录数据的实时动态同步排架以及“图书级”虚拟现实场景模型建立。(一 )建立图书目录数据库数据增长模型图书目录,包含图书的基本信息,并按一定得顺序编排而成。不同的图书馆图书目 录数量从几十万条到几百万条不等。图书目录数据库增长规律直接影响着图书目录数据在虚拟现实图书馆中的同步 数据更新,建立目录数据库数据增长模型可直接服务于同步排架问题。根据图书目录数据库更新的目录数据在每学年的增长规律符合任一单位时刻图 书目录数据的增长率与当时的目录数据总量成正比的假设,并且图书目录数据与每学年度 月份的离散数据分布相吻合。于是,设每学年度任一单位时间为t时刻的目录数据总量为 N(t),则单位时间内目录数据的增长量为 根据基本假设可得 其中,k为常数,当At —0,可得微分方程
由于同步影响目录数据库数据增长的主要因素来自图书供应商供应图书时间的 不确定性和图书招标后供应时间的阶段性,而上述两个因素又取决于其他诸多因素直接影 响了上式微分方程求解的特解,为化简起见,影响目录数据与同步映射数据增长的其他等 因素设为常数,所示微分方程的特解为目录数据库目录数据增长规律,如下式N(t) = NO e r(t-tO)假设t = t0时的目录数据总量为N。,当0 = t < 7时t = t。目录数据离散分布与目录数据增长模型检验,目录数据库自然增长在每学年第一 学期9月至第二年1月的增长规律与本模型增长规律拟合效果较好,符合第一个正态分布。当 9 = t = 12,t := t-7。第二学期1月到7月为第二个正态分布周期。由于高校图书馆采编部门的工作规 律与本模型有较好的拟合度,选择目录数据库数据增长模型为虚拟现实图书馆同步映射数 据提供直接支撑。虚拟现实图书馆与目录数据库之间的数据调用及同步映射对图书馆优化管理与 提供真正意义上的一站式服务是非常必需的。建立目录数据库增长模型是实现系统间数据 共享与同步映射的关键问题之一。(二)实现图书目录数据的实时动态同步排架为实现图书目录数据的实时动态同步排架,需要建立虚拟现实情景数据库,提供 书架和单册图书的三维建模所需的数据。如图(1),共有图书目录信息表B00KMARC、位置信 息表B00KP0SITI0N和书架存放信息表B00KSHELL三个数据表。图书目录信息表的所有数据由图书自动化集成系统的图书目录数据库实时传递, 索取号为数据表的主键,一种书为一条记录,该表可向单册图书建模时提供所需的书名、作 者、出版社及电子图书链接等数据。位置信息表主要是记录单册图书的位置和单册信息,登录号、索取号及该册图书 的借阅信息由图书馆自动化管理系统的目录数据库实时传递,登录号为数据表的主键,一 册书一条记录,该表可在书架建模时提供每册图书的位置信息和图书借阅信息。书架存放 信息表是记录每一行书架排架信息,它的作用是帮助位置信息表确定每册图书所在的书架 号和行号。请参阅图1,是本发明虚拟现实图书馆的海量图书立体建模快速生成方法的基于 虚拟现实的图书排架示意图。基于虚拟现实的图书排架基本原理叙述如下首先,根据书库图书总量和书架总量来测算出每行书架最适宜排放的图书册数。 执行初始排架或执行倒架功能时,位置信息表里的所有记录将按索取号排序,并按每行最 适宜排放的图书册数进行排架,确定每行书架索取号的起止号,进而生成书架存放信息表 的所有数据。其次,位置信息表里的每册图书根据其索取号在书架存放信息表里的位置获取其 所在的书架号和行号,生成位置信息表里书架号和行号的数据。从而完成自动排架系统对 所有图书的定位,并依此确定每个书架或每一行书架有哪些图书,将其索取号排序,就可获 得虚拟书库与真实排架相一致的情况。当系统完成初始排架还没有执行倒架功能时,书架存放信息表里的数据是相对固定的,新购进的图书根据其索取号找到在书架存放信息表中 排架位置,就可得到其书架号和行号信息写入位置信息表。另外,系统还可设计局部倒架功能,只需改变书架存放信息表里要倒架的几行书 的索取号起止号,位置信息表里的每册图书再根据新的书架存放信息表更新其书架号和行 号数据。再有,为图书书架存放信息库B00KSHELL并建立相关操作函数,实现目录数据的 动态同步和图书排架。该库包含图书在书架中的排架信息和简明图书目录信息,主要用来 为虚拟图书排架建模提供所需的相关数据。图书书架存放信息库B00KSHELL通过Z39. 50和图书管理系统进行数据同步,支持 异构系统。在数据同步的同时,根据书架的宽度和排架规则,实现自动排架和整架。图书书 架存放信息库B00KSHELL的动态更新通过图书管理系统增加触发器主动推送服务和自动 更新操作来完成。确保通过图书排架信息库而生成的虚拟现实场景和物理馆藏图书相一致,读者就 可以通过0PAC检索到某本书后,点击索取号或某个位置信息字段就可以获得摯幼呓际楣 莸皆谑榧苌险业秸獗臼閿这个过程的虚拟情景。通过SFX将0PAC与每种图书的虚拟现实 情景数据库进行链接时,可以利用856字段(Electronic Location and Access),将每种图 书的虚拟现实情景文件的链接地址根据它的索取号倒入其856字段,从而将这种应用推广 到所有类型的图书馆自动化集成管理系统中。图(1)中,首先通过连接图书馆自动化管理系统中的图书目录数据库,实时传递 图书单册的相关属性到目录信息表和位置信息表中;然后按照索取号的序列依次传递数 据,并依据以上传递的数据,按索取号排序,并按每行固定的册数确定每行索取号的起止 号,形成书架存放信息表,包括书架号、行号、索取号起和索取号止等信息;最后将此信息回 写至位置信息表中。(三)“图书级”虚拟现实场景模型建立请参阅图2,是本发明虚拟现实图书馆海量图书立体建模快速生成方法的“图书 级”虚拟现实场景数据流程图。首先根据单册图书图片和图书基本属性,建模生成单册图书 模型,然后逐个生成每册图书,从而形成图书模型数据库;在此基础上,结合图书排架信息、 典藏信息、图书状态和图书基本属性,通过虚拟现实技术依次展示出图书馆图书、物理典藏 地点书架、物理典藏地点虚拟现实场景;最后形成图书馆总体的虚拟现实场景。如图3所 示,是部分虚拟书架场景图。其算法实现过程如下package com. jspdev. chl3 ;import com. jspdev. util. * ;import java. sql.氺;import javax. sql.氺;import java. io.氺;import oracle, jdbc. driver. OracleResultSet ;import oracle, sql.氺;public class bookshell
{Connection conn ;public bookshell()throws Exception{DriverManager. registerDriver (new oracle, jdbc. driver. OracleDriver());conn = DriverManager. getConnection(“jdbc:oracle: thin: systemilocalhost: 1521: shitou,,,,,system,,,,,manager,,);}public void bookshellint()throws Exception{Statement stmt = con. createStatement ();ResultSet rs = stmt. executeQuery(SELECT Bookshell_no, Row, Col,callno_first, callno_end FROM bookposition)Boolean More = rs. next ()while (rs. next()){Int Bookshell_no_n = rs. getint( "Bookshell_no,,)int Row_n = rs. getint( "Row")int Col_n = rs. getint( "Col")String callno_first_n = rs. getstring( "callno_first")String callno_end_n = rs. getstring ( "callno_end,,)String query =,,update bookshell set bookshell_no = Bookshell_no_ n, col =Col_n, row = row_n where Call_no> = callno_first_n and call_no< = callno_end_n,,;Stmt, execute (query);More = rs. next ()}Conn, close ();}}请参阅图4,是本发明虚拟现实图书馆海量图书立体建模生成方法的基于虚拟现
实技术的图书馆系统平台层次结构。基于虚拟现实技术的图书馆应用系统的层次结构主要 由硬件基础层、系统软件层、数据层、应用层和表现层组成,为虚拟现实技术在图书馆业务 系统提供有效的应用环境。在这样一个应用环境中,根据虚拟现实技术场景的人参与并与 之交互的特点,通过人机交互,读者可以直接从虚拟现实的图书排架环境连接图书馆自动化集成管理系统,查阅纸质图书、预借纸质图书和浏览电子图书,实现虚拟现实图书馆与图 书馆自动化集成管理系统的无缝对接和基于虚拟现实技术的可视化图书馆自动化集成管 理系统的应用。请参阅图5,是本发明虚拟现实图书馆海量图书立体建模快速生成方法原理框图。 其包括以书名、开本和页数等这些图书自动化管理系统均可以提供的信息以及电子图书为 基础,融合了图书基本三维立体架构快速建模和矩阵队列、立面切割生成法、快速实时同步 排架法及基于Z39. 50、SIP2等协议的基础数据传递函数等算法,并基于人眼的生理特性而 形成的一整套海量图书立体建模方法,从而在Web上虚拟实现读者查阅与浏览书架、取阅 和预定借阅图书等行为。请参阅图6,是本发明虚拟现实图书馆海量图书立体建模快速生成法中单册图书 立体建模的流程示意图。其包括首先从图书馆自动化集成管理系统的目录数据库中获取 图书开本、页码的数据,并换算成图书立体模型的长、宽、厚尺寸,生成类似图书形状的三维 长方体模型。然后从图书馆自动化集成管理系统可获取图书封面的图片文件,贴在图书立 体模型正面;图书立体模型的侧面从封面图片中选取部分切片作为背景,中间位置调用来 自目录数据库的书名、作者、出版社的数据,模拟图书书脊的形状;图书立体模型的顶面为 白色的图片。从而形成单册图书的三维立体模型。单册图书立体建模算法实现如下package com. jspdev. chl3 ;import com. jspdev. util. * ;import java. sql.氺;import javax. sql.氺;import java. io.氺;import oracle, jdbc. driver. OracleResultSet ;import oracle, sql.氺;public class bookshell{Connection conn ;public bookshell () throws Exception{DriverManager. registerDriver (new oracle, jdbc. driver. OracleDriver ());conn = DriverManager. getConnection(”jdbc:oracle: thin: system@localhost: 1521: shitou,,,” system”,,,manager,,);}public void bookshellf ind (int i,int j,int k) throws Exception{Statement stmt = con. createStatement ();
= new vrGeometry();
m—geometry
_>setPrimitive(vrGeometry::PRIMITIVE_QUAD); m—geometry
->setNumPrimitives(6);
m—geometry
_>setNormals(normal,vrGeometry::BINDING—VERTEX); m—geometry
->setTextureCoords(texCoord);
vuVec4〈float>*color = vuAllocArray<vuVec4<float>>::malloc(1); color
. set (r, g, b, 1. Of);
m—geometry
_>setColors (color,vrGeometry: :BINDING—OVERALL);
vuVec3〈float>*vertex = vuAllocArray<vuVec3<float>>::malloc(24);
vertex
. set (_0. 5*h,0. 0. 5^1en);
vertex [1]. set (-0. 5水h,0. 5水w,-0. 5水len);
vertex [2]. set (-0. 5水h,_0. 5水w,_0. 5水len);
vertex[3]. set(-0. 5*h,_0.5*w,0.5^1en);
vertex[4]. set(0. 5*h,_0. 5*w,0. 5*len);
vertex[5]. set(0. 5*h,-0. 5*w,-0.5*len);
vertex [6]. set (0. 5*h,0. 5*w, -0. 5*len);vertex [7]. set (0. 5*h, 0. 5*w, 0. 5*len);
vertex [8]. set (-0. 5*h, -0. 5*w, 0. 5*len);vertex [9]. set (-0. 5*h, -0. 5*w, -0. 5*len);vertex [10]. set (0. 5*h, -0. 5*w, -0. 5*len);vertex [11]. set (0. 5*h, -0. 5*w,0. 5*len);vertex [12]. set (0. 5*h,0. 5*w,0. 5*len);vertex [13]. set (0. 5*h,0. 5*w, -0. 5*len);vertex [14]. set (-0. 5*h,0. 5*w, -0. 5*len);vertex[15]. set (-0. 5*h,0. 5*w,0. 5*len);vertex [16]. set (-0. 5*h, -0. 5*w, -0. 5*len);vertex [17]. set (-0. 5*h,0. 5*w, -0. 5*len);vertex [18]. set (0. 5*h,0. 5*w, -0. 5*len);vertex [19]. set (0. 5*h, -0. 5*w, -0. 5*len);vertex [20]. set (-0. 5*h, 0. 5*w, 0. 5*len);vertex [21]. set (-0. 5*h, -0. 5*w,0. 5*len);vertex [22]. set (0. 5*h, -0. 5*w, 0. 5*len);vertex [23]. set (0. 5*h, 0. 5*w, 0. 5*len);m_geometry
->setVertices (vertex);}b.单本图书立体显示算法void CVirtual Library: : ShowOneBook (float len, float w, float h, int ctrlno){itoa(ctrlno, dirno, 10);onebook = CreateOneBook (len, w, h);vuVec2<float>*texCoord = vuAllocArray<vuVec2<float ::malloc(24);int i ;for (i = 0 ;i < 6 ;i++) {texCoord [i*4]. set (0. Of, 1. Of);texCoord[i*4+l], set (0. 0f,0. Of);texCoord[i*4+2]. set(l. 0f,0. Of);texCoord[i*4+3], set(l. Of, 1. Of);}vrTextureFactory^textureFactory = new vrTextureFactory ();m_texture = textureFactory->read(path/&dirno&,1. jpg,);if(m_texture ! = NULL)m_texture->ref ();m_textureElement. m_enable
= true ;m_textureElement. m_texture
= m_texture ;0187]textureFactory->unref();
0188]m_textureBlend = new vrTextureBlend ();
0189]m_textureBlend->setColorMode(vrTextureBlend::M0DE_M0DULATE);
0190]m_textureBlend->setColor (1. Of, 1. Of, 1. Of, 1. Of);
0191]m_textureBlend->ref();
0192]m_textureBlendElement. m_textureBlend
= m_textureBlend ;
0193]vuVec2<float>*texCoord = vuAllocArray<vuVec2<float ::malloc(24);
0194]int i ;
0195]for (i = 0 ;i < 6 ;i++) {
0196]texCoord [i*4]. set (0. Of, 1. Of);
0197]texCoord [i*4+l]. set (0. Of, 0. Of);
0198]texCoord [i*4+2] set (1. Of, 0. Of);
0199]texCoord[i*4+3], set(l. Of, 1. Of);
0200]}
0201]vrTextureFactory^textureFactory = new vrTextureFactory ();
0202]m_texture = textureFactory->read(path/&dirno&, 2. jpg,);
0203]if(m_texture ! = NULL)m_texture->ref();
0204]m_textureElement. m_enable
= true ;
0205]m_textureElement. m_texture
= m_texture ;
0206]textureFactory->unref();
0207]m_textureBlend = new vrTextureBlend ();
0208]m_textureBlend->setColorMode(vrTextureBlend::M0DE_M0DULATE);
0209]m_textureBlend->setColor (1. Of, 1. Of, 1. Of, 1. Of);
0210]m_textureBlend->ref ();
0211]m_textureBlendElement. m_textureBlend
= m_textureBlend ;
0212]}
0213]由于图书自动化集成系统里没有图书立面的图片文件,我们采用模拟图书真实立
面的方法来生成图书三维立体模型的侧面,即图书立面切割算法。根据图书的立面大多与 封面左侧图形相近的特点,在图书封面左侧切取一条宽度为图书厚度的图片作为图书立面 的背景,然后调用图书自动化集成系统目录数据库里的书名、作者、出版社信息,竖向分布 于图书立面。调用从图书馆自动化管理系统中获取的书名、出版社、作者等信息,分别形成 不同的文本图层,然后与背景层合并,形成图书立面图片。请参阅图7,是图书封面图片及切片图片示意图。根据图书的立面大多与封面左侧 图形相近的特点,在图书封面左侧切取一条宽度为图书厚度的图片(如1. 5cm)作为图书立 面的背景,然后调用图书自动化集成系统书目数据库里的书名、作者、出版社信息,竖向分 布于图书立面。调用从图书馆自动化管理系统中获取的书名、出版社、作者等信息,分别形 成不同的文本图层,然后与背景层合并,形成图书立面图片。其中,书架图书的立面显示算法包括vrGeometry CVirtualLibraryCreateBookshelf(int shelfid, intctrlno, float len, float w, float h){onebook = CreateOneBook (len, w, h);IpszText = title_nShowStringBitmap (LPCTSTR IpszText, HF0NT hFont, BOOL bUseDisplayList)IpszText = author_nShowS tringBitmap (LPCTSTR IpszText, HFONT hFont, BOOL bUseDisplayList)vuVec2<float>*texCoord = vuAllocArray<vuVec2<float ::malloc(24);int i ;for (i = 0 ;i < 6 ;i++) {texCoord [i*4]. set (0. Of, 1. Of);texCoord [i*4+l]. set (0. Of, 0. Of);texCoord [i*4+2]. set (1. Of, 0. Of);texCoord[i*4+3], set(l. Of, 1. Of);}vrTextureFactory^textureFactory = new vrTextureFactory();m_texture = textureFactory->read(path/&dirno&,logo, jpg);if (m_texture ! = NULL)m_texture->ref ();m_textureElement. m_enable
= true ;m_textureElement. m_texture
= m_texture ;textureFactory->unref ();m_textureBlend = new vrTextureBlend ();m_textureBlend->setColorMode(vrTextureBlend::M0DE_M0DULATE);m_textureBlend->setColor (1. Of, 1. Of, 1. Of, 1. Of);m_textureBlend->ref ();m_textureBlendElement. m_textureBlend
= m_textureBlend ;}int CVirtualLibrary::ShowStringBitmap(LPCTSTR IpszText, HFONT hFont, BOOLbUseDisplayList){CBitmap bitmap ;BITMAP bm ;SIZE size ;UCHAR*pBmpBits ;HFONT hOldFont ;
HDC hdc = wglGetCurrentDC();
if ( ! hFont)//use default system font
{hFont = (HFONT)::GetStockObject(SYSTEM_F0NT);
}
hOldFont = (HFONT)SelectObject(hdc, hFont) ;v
::GetTextExtentPoint32(hdc, IpszText, strlen (IpszText), &size);
bitmap. CreateBitmap(size, cx, size, cy,1,1, NULL);
HDC hMemDC = ::CreateCompatibleDC(hdc);
if(hMemDC)
{
HBITMAP hPrevBmp = (HBITMAP)SelectObject(hMemDC,bitmap);
HFONT hPrevFont = (HFONT)SelectObject(hMemDC,hFont);
SetBkColor(hMemDC, RGB(0,0,0));
SetTextColor(hMemDC, RGB (255,255,255));
SetBkMode(hMemDC, OPAQUE);
TextOut(hMemDC,0,0, IpszText, strlen(IpszText));
//copy GDI bitmap to DIB
bitmap. GetBitmap(&bm);
size, cx = (bm. bmWidth+31)&( 31);
size, cy = bm. bmHeight ;
int bufsize = size. cy*(((bm. bmWidth+31) &( 31))/8) ;v
pBmpBits = new UCHAR[bufsize];
memset(pBmpBits,0,sizeof (UCHAR)*bufsize);
struct {
BITMAPINFOHEADER bih ;
RGBQUAD col [2];
}bic ;
BITMAPINF0*binf = (BITMAPINF0*)&bic ;b
binf->bmiHeader. biSize = sizeof (binf->bmiHeader);
binf->bmiHeader. biffidth = bm. bmffidth ;
binf->bmiHeader. biHeight = bm. bmHeight ;
binf->bmiHeader. biPlanes = 1 ;
binf->bmiHeader. biBitCount = 1 ;
binf->bmiHeader. biCompression = BI_RGB ;
binf->bmiHeader. biSizelmage = bufsize ;
binf->bmiHeader. biXPelsPerMeter = 1 ;
binf->bmiHeader. biYPelsPerMeter = 1 ;
binf->bmiHeader. biClrUsed = 0 ;b
binf->bmiHeader. biClrlmportant = 0 ;
14
B&b. llPOb :GetDIBits(hdc, bitmap,0, bm.bmHeight, pBmpBits, binf,DIB_RGB_COLORS);SelectObject(hMemDC, hPrevBmp);}: :DeleteDC(hMemDC);SelectObject(hdc, hOldFont);glPixelStorei(GL_UNPACK_ALIGNMENT,1);GLuint displist = 0 ;if(bUseDisplayList){displist = glGenLists(l);glNewList (displist, GL_COMPILE);glBitmap (size, cx, size, cy, 0. 0, 2. 0, size. cx+2. Of, 0. 0, pBmpBits);glEndListQ ;}glBitmap (size, cx, size, cy, 0. 0, 2. 0, size. cx+2. Of, 0. 0, pBmpBits);delete pBmpBits ;return displist ;}综上可得,从图书馆自动化管理系统中获取图书页码、书名、作者和出版社等信 息;结合图书封面图片,采用图书封面切割算法,形成图书封面图片切片;并依据封面图 片,采用图书立面生成算法,形成图书立面图片;最后将以上图片存入图书图片库。本发明虚拟现实图书馆海量图书实时同步快速排架算法包括(1)虚拟图书排架规则利用基础目录数据传递函数,将从图书自动化系统所获得的中图分类号、图书属 性(页码、开本、封面、册数、图书出借状态等)、书架预留以及当前图书馆物理排架规则等 信息进行计算,从而生成虚拟现实排架。该算法需要考虑到实际排架的需要,例如流通书库的TP工业技术类图书更新快, 书架预留需要多一些;A类马列、B类哲学等图书更新慢,书架预留较少;还有密集书库的排 架策略、过刊室的排架策略和多媒体资料的排架策略等都不一样,可能需要引入多种算法 来实现虚拟排架。基于虚拟现实的图书排架系统需要提供接口供0PAC系统传输数据,例如图书登 录号(条码号或者RFID号),通过数据的传输实现书架和书库的定位;同时该系统需要提 供接口与虚拟现实系统交换数据,例如书架号,用于书架位置的实时导航,引导读者从当前 位置移动到指定书架,获取图书。其中,图书基础数据传递函数在现有协议基础上进行编程封装,包括建立虚拟环 境所需的书目数据和图书馆自动化集成管理系统的更新数据等。A建立图书馆书架存放信息
bookshell (bookshell_no, row, col, rec_key, call_o, isbn_issn, barcode)库库结构Bookshell {Bookshell_no, int ; 书架号Row, int ;书架排Col, int ;书架列Rec_key, int ;图书控制号Call_no, char(30); 图书索取号isbn_issn, char(20) ; isbn 或 ISSN 号barcode, char (10); 图书条码号title, varchar2(100) 题名author, varchar2 (100)pubisher, char (40)出版社Volume, char (20)部次号CLC, char (20)中图分类号Page, int页码ISizeofbook, int开本(长)kSizeofbook, intJf^.(胃)urll, varchar2(100)书生电子图书链接url2, varchar2 (100)超星电子图书链接url3, varchar2 (100)附书光盘文件链接summary, varchr2 (255) 图书简介content, varchr2 (255) 图书目录}B图书位置库bookposition (bookshell_no, row, col, callno_first, callno_end),存放物理书 架索取号库结构Bookposition {Bookshell_no, int ;书架号Row, int ;书架排Col, int ;书架列callno_first, char (20); 起女台索取号callno_end, char (20) 末尾索取号}C 书目库(新增禾口副丢)bookadd(rec_key,call_o, isbn_issn, barcode)由 推送进程生成库结构BookMARC {
Rec_key, int ;图书控制号
Call_no, char (30);图书索取号
isbn_issn, char(20);isbn 或 ISSN 号
barcode, char(10);图书条码号
title, varchar2(100)题名
author, varchar2 (100)著者
pubisher,char (40)出版社
Volume,char(20)部次号
CLC, char(20)中图分类号
Page, int页码
ISizeofbook, int开本(长)
kSizeofbook, int开本(宽)
urll, varchar2 (100)书生电子图书链接
url2, varchar2(100)超星电子图书链接
url3, varchar2 (100)附书光盘文件链接
summary, varchr2 (255)图书简介
content, varchr2(255)图书目录
booktype,char(4)图书类型新增;剔丢
}
D 单册状态库 bookstatus (rec—no,barcode,volume, status),由推送进禾呈生成
库结构
Bookstaus{
Rec_key, int ;_书控制号
barcode, char (10);图书条码号
Volume, char (20); 部次号
Place, char (40) ; Hi
Status, char (10); 图书状态
(2)基于图论网络流算法的海量数据更新与交换模型
面对海量图书和实时同步更新与交换数据,结合目录数据库数据增长规律N(t)
=N0 er(t-tO),建立虚拟现实情景数据库与目录数据库数据流量平衡模型,以平衡(解 决)目录数据库数据增量最大流问题映射到虚拟现实情景数据库能够获得最短时间问题。 如何设计才能使得数据流量流动的量最大,数据流量映射需要一定时间,对于固定的数据 流量,如何获得最短时间,这正是利用图论的网络流原理解决海量数据更新与交换问题。在实际的数据交换中,假设G= (V,E)是一个数据交换的有向图,X与Y是V的两 个非空不相交子集,其中X的顶点只有出弧而没有入弧,即只有流出而没有流进;Y的顶点 则只有入弧而没有出弧,即只有流进而没有流出,X与Y分别称为G的发点集与收点集。I 为G的中间点集,其顶点为中间点。定义c为边E上的非负函数,称为容量函数,假设N = (V,E,c, X,Y)是数据更新与交换网络,记弧vivj上的单位时间tij,数据流量为fij,容量为cij,vx为发点,vy为收 点,fmax是数据更新与交换的最大流,则建立最短时间最大流量问题的数学规划模型为 上述模型需要同时满足以下的容量约束条件对所有中间节点vi G V,由于其流入的总量应等于其流出的总量,于是有 而对于发点vx和收点vy,其流出与流入的量显然是目录数据从目录目录数据库 映射到虚拟现实情景数据库的总流量,于是有
因此,根据上述建立的数学规划模型,可借助c语言程序求解得到最大流量。 #include〃 stdio. h" void main ()
{int a, b, i, j, k, p, n, B[10] [10],C[10] [10],D[10] [10],P[10] [10] [10] printf(" please input n:\n"); scanf(" % d",&n);
printf (" please input C[% d] [% d], B[% d] [% d] :\n",n, n, n, n); for(i = 0 ;i < = n ;i++) for (j = 0 ; j < = n ; j++)
scanf (" % 7d, % Id",&C[i] [j],&B[i] [j]); for(i = 0 ;i < = n ;i++)for(j = 0 ;j < = n ;j++)if(D[i] [k] +D[k] [j] < D[i] [j]){D[i][j] =D[i][k]+D[k] [j];for(p = 0 ;p < = n ;p++)P[i] [j] [p] = P[i] [k] [p]P[k] [j] [p];}printf (" D[% d] [% d] :\n",n,n);for(i = 0 ;i < = n ;i++){for(j = 0 ;j <二 n ;j++)printf (" % Id",D[i][j]);printf (" \n");}a = C[l] [3] ;b = B[l] [3]*D
[5];printf (" a = % d, b = % d\n" , a, b);B[l] [3] = 100 ;for(i = 0 ;i < = n ;i++)for(j = 0 ;j < = n ;j++){D[i] [j] = B[i] [j];for(k = 0 ;k < = n ;k++)P[i] [j] [k] = 0 ;if (D[i] [j] < 100){P[i] [j] [i] = 1 ;P[i] [j] [j] = 1 ;}}for(k = 0 ;k < = n ;k++)for(i = 0 ;i < = n ;i++)for(j = 0 ;j < = n ;j++)if(D[i] [k] +D[k] [j] < D[i] [j]){D[i] [j] = D[i] [k]+D[k] [j];for(p = 0 ;p < = n ;p++)P[i] [j] [p] = P[i] [k] [p]P[k] [j] [p];}printf (" D[% d] [% d] :\n",n,n);for(i = 0 ;i < = n ;i++){for(j = 0 ;j <二 n ;j++)printf (" % Id",D[i][j]);printf (" \n〃 );}a = a+C[l] [2] ;b = b+D
[5];
printf (“ a = % d, b = % d\n",a, b);B
[1] = 100 ;B[l] [2] = 100 ;B[4] [3] = 100 ;for(i = 0 ;i < = n ;i++)for(j = 0 ;j < = n ;j++){D[i] [j] = B[i] [j];for(k = 0 ;k < = n ;k++)P[i] [j] [k] = 0 ;if (D[i] [j] < 100){P[i] [j] [i] = 1 ;P[i] [j] [j] = 1 ;}}for(k = 0 ;k < = n ;k++)for(i = 0 ;i < = n ;i++)for(j = 0 ;j < = n ;j++)if(D[i] [k] +D[k] [j] < D[i] [j]){D[i] [j] = D[i] [k]+D[k] [j];for(p = 0 ;p < = n ;p++)P[i] [j] [p] 二 P[i] [k] [p]P[k] [j] [p];}printf (" D[% d] [% d] :\n",n,n);for(i = 0 ;i < = n ;i++){for(j = 0 ;j < = n ;j++)printf (" % Id",D[i][j]);printf (" \n");}a = a+C[2] [4]C[4] [3] ;b = b+D
[5];printf (" a = % d, b = % d\n",a, b);B[2] [4] = 100 ;for(i = 0 ;i < = n ;i++)for(j = 0 ;j < = n ;j++){D[i] [j] = B[i] [j];for(k = 0 ;k < = n ;k++)P[i] [j] [k] = 0 ;if (D[i] [j] < 100){P[i] [j] [i] = 1 ;P[i] [j] [j] = 1 ;}}for(k = 0 ;k < = n ;k++)for(i = 0 ;i < = n ;i++)for(j = 0 ;j < = n ;j++)if(D[i] [k] +D[k] [j] < D[i] [j])
20
{D[i][j] =D[i][k]+D[k] [j];for(p = 0 ;p < = n ;p++)P[i] [j] [p] = P[i] [k] [p]P[k] [j] [p];}printf (" D[% d] [% d] :\n",n,n);for(i = 0 ;i < = n ;i++){for(j = 0 ;j < = n ;j++)printf (" % 7d",D[i][j]);printf (" \n〃 );}}(3)基于人眼生理特性的排架显示规则为了保证在局域网(校园网)环境下虚拟现实系统的显示质量和显示速度,根据 人眼的生理特性,排架显示遵循以下规则A多焦点显示以每行书架的中间位置作为焦点,每列书架可以有多个焦点;焦点 处的图书模型渲染粒度要求精细、焦点周围的图书模型渲染可降低要求;B防疲劳显示每行书架的图书模型渲染显示时,需进行分隔,例如每5本书采用 一个特殊颜色的图书模型进行分隔,减少读者使用时的人眼疲劳。C动态可调分辨率根据实际显示画面的位置变动和放大缩小情况,实时动态调 整画面显示分辨率。(4)实时同步排架算法A.图书处理的队列模型定义图书的状态书到达一真书上架一虚拟书上架。a.真书上架新书到达后进行编目,摘要,将目录数据输入管理数据库,再由工作 人员将书放上图架。b.虚拟书上架在书完成上架后,由虚拟现实系统生成虚拟书,虚拟书排架。假设各操作的时间符合均勻分布,设真书上架时间为AA,虚拟书上架时间为AB。设t0 = 0为初始时间,tk = tk_l+AA,在(t0,tk]时间内到达的书的数量为 n(tk),每本书的处理时间为AA+AB,书籍的队列长L(tk),在(t0,tk]内待处理的书籍等 待的总时间T1 (tk),处理书籍的总时间为T2(tk)。若L(tk) =0,n(tk) =0,此情况为没到书到达,相关人员处于空闲状态,L(tk)= L (tk-1),T1 (tk) = T1 (tk-1),T2 (tk) = T2 (tk_l)否则将有一本书到达或已正在处理,其余书籍在队列中等待,即L(tk) = L(tk-l)+n(tk)-l,Tl(tk) = T1 (tk_l) L (tk) *t,T2 (tk) = T2 (tk-1) + AA+AB,如图 8 所示。 请参阅图9,是虚拟现实系统自动排架程序流程图。虚拟现实系统需要定期对目录 数据做同步性检验,以保证虚拟书架库与目录数据的一致性如目录数据未更新或修改,则 不更新虚拟书架库;如目录数据有更新,馆员可以选择手工上架图书或批量自动上架图书。虚拟书架库更新后,经图书馆馆员校验后,生成虚拟书,最后完成虚拟书架的生成。结合图书馆的实际工作,图书馆需要定期进行图书剔旧和图书缺失处理;这时图 书馆馆员可通过选择图书下架代理或批量下架来完成。虚拟书架库更新后,经图书馆馆员 校验后,下架虚拟书,最后完成虚拟书架的修改。请参阅图10,是本发明虚拟现实图书馆海量图书建模快速生成方法的图书新书上 架排架流程图。首先扫描输入单册图书登入号,判断是否是单册新书。如果是,计算单册新 书物理典藏地点并显示,接着判断该单册新书是否上架,是的话则进行新书单册所属物理 典藏地点单行书架计算合成,接着进行图书馆物理典藏地点单排书架展示,然后判断是否 最好一本单册新书,是则结束,否则回到扫描输入单册图书登入号。请参阅图11,是图书分馆异动排架流程图。开始后,分馆图书异动到对应分馆;扫 描全部异动图书登录号;全部异动图书状态更新为可借;扫描输入单册图书登录号;获取 单册图书物理典藏地点及排架信息,并判断单册图书是否手工上架,否则返回获取单册图 书物理典藏地点及排架信息,是则进行单册图书状态变更,典藏地点单行书架展示;图书馆 物理典藏地点单排书架展示;判断单册图书是否最后一本,是则结束,否则返回扫描输入单 册图书登录号。本发明虚拟现实图书馆海量图书立体建模快速生成法具有如下特点(1) “图书级”的虚拟现实“图书级”的虚拟现实,是以图书为单元进行三维立体建模,实现了在架图书的立 面、封面、目录和内容的虚拟现实阅读,最大程度地虚拟了读者在图书馆真实环境中发生的 行为。实现“图书级”的虚拟现实,就是实现在架图书的立面、封面、目录和内容的虚拟现实 查询、阅读、预借、预约等功能。(2) “一次建模,N次纹理贴图”的数学方法采用“一次建模,N次纹理贴图”的数学方法,解决海量目录数据生成三维虚拟图书 所需要的巨大数据量而形成的突出矛盾,该数学方法使海量虚拟图书生成的巨大数据量大 为减少,从而使得该虚拟现实图书馆运行于局域网(校园网)或广域网成为现实。该数学 方法是虚拟现实图书馆的海量图书立体建模快速生成法的关键技术之一。(3)建立图书目录数据在虚拟现实情景数据库中的同步映射采用虚拟现实情境数据库与图书馆自动化集成管理系统图书目录数据库的双数 据库结构,并采用实时同步算法,实现目录数据在虚拟现实情景数据库中的同步映射,进而 解决虚拟现实场景的快速生成以及虚拟场景与现实场景中数据的一致性问题。(4)图书目录数据的实时动态同步排架算法图书目录数据的实时动态同步排架算法主要包括虚拟图书排架规则、基于图论网 络流算法的海量数据更新与交换模型、基于人眼生理特性的排架显示方法、局部倒架算法 和相关数据库的操作函数等,实现目录数据在虚拟图书排架中自动更新与动态同步。以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定 本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在 不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的 保护范围。
权利要求
一种虚拟图书馆海量图书三维立体建模方法,包括建立图书目录数据库数据增长模型、根据图书目录数据库数据增长模型实现图书目录数据的实时动态同步排架以及“图书级”虚拟现实场景模型建立,其中“图书级”虚拟现实场景模型建立包括登记实体图书资料基本信息、扫描获取实体图书资料封面图片;根据单册图书图片和图书基本属性,建模生成单册图书模型;逐个生成每册图书模型,从而形成图书模型数据库;结合图书排架信息、典藏信息、图书状态和图书基本属性,通过虚拟现实技术依次展示出图书馆图书、物理典藏地点书架、物理典藏地点虚拟现实场景;最后形成图书馆总体的虚拟现实场景。
2.如权利要求1所述的虚拟图书馆海量图书三维立体建模方法,其特征在于包括以 书名、开本和页数等图书自动化管理系统均提供的信息以及电子图书为基础,融合了图书 基本三维立体架构快速建模和矩阵队列、立面切割生成法、快速实时同步排架法及基础数 据传递函数算法,并基于人眼的生理特性形成海量图书立体建模方法。
3.如权利要求2所述的虚拟图书馆海量图书三维立体建模方法,其特征在于还包括 虚拟现实情景数据库与图书馆自动化集成管理系统可视化对接,具体包括单册图书生成的 三维立体建模算法;采用“一次建模,N次纹理贴图”的方法;虚拟现实情景数据库与图书馆 自动化集成管理系统图书目录数据库数据同步算法;基于网络流算法的目录数据自动映射 的图书实时动态同步排架算法。
4.如权利要求3所述的虚拟图书馆海量图书三维立体建模方法,其特征在于图书立 面切割算法包括在图书封面左侧切取一条宽度为图书厚度的图片作为图书立面的背景, 然后调用图书自动化集成系统图书目录数据库里的书名、作者、出版社信息,形成不同的文 本图层并与背景层合成,竖向分布于图书立面。
5.如权利要求4所述的虚拟图书馆海量图书三维立体建模方法,其特征在于基于人 眼生理特性的排架显示包括根据人眼的生理特性,图书排架显示遵循多焦点显示、防疲劳 显示和动态可调分辨率等规则,其中,多焦点显示包括以每行书架的中间位置作为焦点,每 列书架可以有多个焦点;焦点处的图书模型渲染粒度要求精细、焦点周围的图书模型渲染 可降低要求;防疲劳显示包括每行书架的图书模型渲染显示时,需进行分隔,减少读者使用 时的人眼疲劳;动态可调分辨率包括根据实际显示画面的位置变动和放大缩小情况,实时 动态调整画面显示分辨率。
6.如权利要求5所述的虚拟图书馆海量图书三维立体建模方法,其特征在于实时动 态排架包括目录同步更新算法,具体为手工上架管理员手工选择位置,将书放上虚拟书 架,自动计算书的厚度,并计算书架空出位置;批量自动上架按照指定的上架规则,系统 自动在虚拟书架排列上架;手工下架管理员手工选择位置,将书由虚拟书架上取下,自动 计算书的厚度,并计算书架空出位置;自动下架按照指定的下架规则,系统自动在虚拟书 架排列下架。
7.如权利要求6所述的虚拟图书馆海量图书三维立体建模方法,其特征在于虚拟图 书自动排架初始化包括通过图书馆自动化管理系统调出图书典藏信息、图书状态、图书基 本属性构建的图书模型数据库以及图书封面图片,结合图书馆物理书架信息依次生成图书 馆物理典藏地点单行书架展示、图书馆物理典藏地点单排书架展示、图书馆物理典藏地点 展示,完成初始化。
8.如权利要求7所述的虚拟图书馆海量图书三维立体建模方法,其特征在于图书新书上架排架包括扫描输入单册图书登入号,判断是否是单册新书,如果是,计算单册新书物 理典藏地点并显示;接着判断该单册新书是否上架,是的话则进行新书单册所属物理典藏 地点单行书架计算合成,进行图书馆物理典藏地点单排书架展示;然后判断是否最好一本 单册新书,是则结束,否则回到扫描输入单册图书登入号。
9.如权利要求8所述的虚拟图书馆海量图书三维立体建模方法,其特征在于图书正 常流通上架包括先扫描输入单册图书登录号;获取单册图书物理典藏地点及排架信息;判 断单册图书是否手工上架,否则返回获取单册图书物理典藏地点及排架信息,是则单册图 书状态变更,进行典藏地点单行书架展示;接着图书馆物理典藏地点单排书架展示;判断 是否最后一本书,是则结束,否则返回扫描输入单册图书登录号。
10.如权利要求9所述的虚拟图书馆海量图书三维立体建模方法,其特征在于图书分 馆异动排架包括分馆图书异动到对应分馆;扫描全部异动图书登录号;全部异动图书状态 更新为可借;扫描输入单册图书登录号;获取单册图书物理典藏地点及排架信息,并判断 单册图书是否手工上架,否则返回获取单册图书物理典藏地点及排架信息,是则进行单册 图书状态变更,典藏地点单行书架展示;图书馆物理典藏地点单排书架展示;判断单册图 书是否最后一本,是则结束,否则返回扫描输入单册图书登录号。
全文摘要
本发明提供一种虚拟图书馆海量图书三维立体建模方法,包括建立图书目录数据库数据增长模型、根据图书目录数据库数据增长模型实现图书目录数据的实时动态同步排架以及“图书级”虚拟现实场景模型建立,其中“图书级”虚拟现实场景模型建立包括扫描、登记实体图书资料;根据单册图书图片和图书基本属性,建模生成单册图书模型;逐个生成每本图书,从而形成图书模型数据库;结合图书排架信息、典藏信息、图书状态和图书基本属性,通过虚拟现实技术依次展示出图书馆图书、物理典藏地点书架、物理典藏地点虚拟现实场景;最后形成图书馆总体的虚拟现实场景。
文档编号G06T17/00GK101877144SQ20091031058
公开日2010年11月3日 申请日期2009年11月27日 优先权日2009年11月27日
发明者傅国强, 吕利昌, 夏东升, 张援朝, 敖龙, 李勇, 汪勇, 赵怡滨, 郭向勇 申请人:深圳职业技术学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1