基于PHP的X3D场景动态生成技术研究
2012-07-05潘光洋王雪凤
潘光洋 王雪凤
(广东商学院 华商学院,广州 511300)
虚拟现实技术的发展,为三维虚拟展示、虚拟设计和虚拟教学等提供了非常好的发展平台。Web3d虚拟现实技术是虚拟现实技术和网络技术的结合,随着web3d技术的发展,web3d联盟发布了X3d标准。X3d标准是web3d技术的核心,是vrml的发展,通过有限的已定义节点构建三维虚拟现实场景,提供了开发者自定义模型节点的功能,拥有强大的交互设计能力,X3d场景能在网络上快速传输。X3D标准规定了X3D场景文件格式,其包括X3D classic、X3D binary和XML。PHP(Hypertext Preprocessor,超文本预处理器),是一种脚本编程语言,主要用于编写服务端脚本、命令行脚本和客户端的GUI应用程序[1],其在动态网页设计和开发中得到广泛应用。
本文是在构建X3D虚拟美术馆的项目基础上研究X3D的编码格式和PHP动态生成XML文档,最终提出基于PHP的X3D场景动态生成技术的应用方法。
1 关键技术
1.1 X3D的编码格式
Web3d联盟的发布了X3D编码格式文件ISO/IEC 19776。此标准文档规定了X3d的编码格式包括:X3D classic、X3D binary和XML,相应的MIME类型分别是model/X3d+VRML、model/X3d+binary和model/X3d+xml,其中X3d binary格式是X3D文件的压缩格式。X3D classic和XML格式是X3D文档编写的格式。使用X3D classic编码格式的X3D文档必须以“#X3D V3.0 utf8”字符串开头,而使用XML编码格式的X3D文档则以“<?xml version="1.0"encoding="utf-8"?>”字符串开头。本文在研究PHP动态生成X3D场景技术中应用XML编码格式。接下来,介绍X3D中XML编码格式的文件语法结构。
X3d文件语法结构由文件结构、文件头、文件体和注释组成[2]。X3d的文件结构包含了文件头和主程序概貌,在主程序概貌中包括头文档和场景。在场景中利用基本几何节点、复杂节点、组节点、纹理节点、效果节点、组件节点和交互节点等创建虚拟现实的三维模型和场景。X3D的XML文件结构如图1所示。
文件的节点编写方式符合XML标准,即每个节点都以“<节点名称>”开始,以“</节点名称>”结束或“<节点名称 />”,如主程序概貌节点“<X3D>…</X3D>”和“<ImageTexture/>”。构建虚拟美术馆,本文使用了PHP动态生成X3d场景使用的节点包括:Transform、ImageTexture、Anchor等,使用了节点属性DEF和USE等。
图1 X3D的XML文件结构
1)节点属性DEF和USE X3D的XML编码格式标准中规定DEF用来定义节点在场景中的标识名称,USE表示在场景中应用了某个使用DEF定义的标识名称。如在文档中添加了一个标识名称为shape1的Transform节点,则其代码如下:
<Transform DEF=”shape1” > </Transform>
若场景中出现多个与“shape1”模型,可以使用USE进行引用,代码如下:
<Transform USE=”shape1” > </Transform>
2)Transform节点Transform节点是X3D的组节点,它创建一个相对于已有坐标系的新坐标系,该节点所包含的空间都是在这个新坐标系的基础上创建的。其节点的属性包括translation、rotation、scale、children等。translation域指定了新坐标系原点在父坐标系中的XYZ的坐标,缺省值为0.0 0.0 0.0,表示新坐标系的原点与父坐标系的重合,也表示组中的模型在父坐标系中的位置。在虚拟美术馆的构建中,translation属性用来表示画框的位置信息。
3)ImageTexture节点ImageTexture节点指明了一个纹理图和将该纹理图映射至几何体表面时需要指定的参数,作为Appearance外观节点的子节点出现。其重要节点属性是url,此属性中虚拟美术馆中用来展示展品图片,代码如下:
<ImageTexture url=’/works/1.jpg’/>
4)Anchor节点Anchor节点即超级衔接组节点,它的作用是衔接X3D三维立体空间中各个不同场景和与网页进行交互。其重要节点属性包括:description和url。description域:指定一个文本字符串提示,当移动光标到描点而不点击它时,浏览器现实该提示字符串文件;url域:指定需装入文件的路径或网络导航器地址URL。单击锚节点的子节点,可以跳转到其他网址。本文的研究中使用description属性显示展品图片的作者和展品名称信息,使用url属性传递展品信息与网页进行交互执行网页上定义的javascript函数。
1.2 PHP技术
PHP是一个操作简单、功能强大的动态网站开发语言,是一种HTML内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,用PHP开发的网站,开发过程简单,用户维护方便,而且具有很好的安全性[3]。PHP有良好的跨平台性,非常容易进行移植,能够得到IIS和Apache等WEB服务器的支持,因此它广泛的运行在Windows、Unix、Linux等操作系统上。当前PHP的开发大部分是在Apache服务器下进行,由于PHP是开放源代码的开发语言,其拥有庞大的开发者支持,拥有各种功能的类可供开发者进行二次开发。PHP生来就能对mysql数据库进行数据操作,方便、安全地读写mysql数据库。因此Apache+PHP+Mysql的开发组合是众多网站开发者的首选。
网页上的PHP代码编写格式如下:
<?php…….?>
PHP是一种嵌入HTML文档的脚本语言,那它能够在HTML文档中直接编写代码,能够与javascript代码进行信息传递,也就是说,在编写网页代码时可以将PHP代码和HTML代码混合。X3D的XML编码也是一种标记语言,所以可以在XML文档中嵌入PHP代码。在动态生成X3D场景时使用了如下几个PHP系统函数:
1)Header()函数header函数向客户端发送原始的HTTP报头。HTTP的报头可以包含了文档的类型、文档的位置、文档的编码等。
2)echo()函数echo函数表示在网页中输出一个或多个字符串。其作用是用于输出PHP变量、字符串、常量和html等,使得PHP能与HTML完美地结合在一起,能给javascript传递信息。
PHP在4.0版本之后完善了对面向对象编程--OOP的支持。PHP使用关键字class来声明一个类,后面紧跟类的名字,主体用 {}符号括起来。通过在类定义中使用关键字var来声明变量,即创建了类的属性,也叫类的成员属性;通过在类定义中声明函数,即创建了类的方法[4]。在开发项目过程中,使用一个访问数据库的类封装读写数据库的方法,可以提高了PHP程序的重用性。
2 应用实例
2.1 设计数据库
虚拟美术馆项目所涉及的数据库表比较多,本文针对动态生成X3D场景所需的数据库表进行讨论。考虑到数据库保存数据的容量和访问数据库的频率,在设计数据库时要把握两点:(1)确定模型中哪些数据是不变的,哪些是变化的;(2)确定X3D模型文档中哪些是数据才是主要数据、关键数据。本文的研究中涉及了3个数据表:展览表gallery、展品表images和位置信息表positioninfo。展览表保存了现实美术馆举办的每一次展览的信息,包括展览的主题、展览的海报、展览举办时间等;展品表保存相应展览中的展品信息,包括展品的图片路径、展品作者、展品名称和展品的简介等;位置信息表保存了展品放置在虚拟场景中的位置信息,包括位置名称、位置的三维坐标和展品放置在墙的正反面信息等。
2.2 生成X3D场景
PHP动态生成X3D场景的方法是将原有的X3D场景文档进行处理,变化的数据保存在数据库中,不变的数据保存在PHP文档中;并且能过PHP将变化的数据从数据库中读取出来,结合不变的数据形成X3D场景文档;最后通过X3D浏览器显示出来,其逻辑过程如图2所示。
图2 PHP动态生成X3D场景逻辑图
PHP动态生成X3D场景的部分代码和解释如下:
1)向浏览器说明此文档的编码格式是X3D的XML编码格式。
header('Content- type:model/x3d+xml');
2)数据库中通过左联接的方式联接展品信息表、展览表和位置信息表,查询指定展览中各位置的展品信息。
$sql="SELECT p.positionid,p.positionname,p.type,p.positioninfo,i.path,i.filename,i.author,i.title,i.imageid FROM position as p left outer join(select* from images where actived=1 and galleryid=".$vgallery_id.")as i on p.positionid=i.positionid";
3)生成展品的信息节点Anchor。此节点显示展品的作者和展品名称信息,通过javascript:showInfo()函数为浏览展览的用户提供了添加展品和修改展品的功能。
<Anchor url= 'javascript:showInfo(”".(!isset($image ["imageid"])?"addimage":"editimage|".$image["imageid"])." |".$image ["positionid"]."”);'description= '作者:".$image ["author"].",标题:".$image ["title"]." '>
4)生成展品图片贴图节点。
< ImageTexture url= '”".BASEURL.'MyWebsiteImages/'.$image ["path"].'_ '.WEBSITE_KEY.$imgsize.$image["filename"]."”'/>
生成的X3D文档显示在X3D播放器中,还应该在其他网页文档中添加如下代码:
<embed id=ContactFrame name=ContactFrame height="600"width="800"src="gallery.php?vgallery_id='.$galleryid.'" > < /embed>
2.3 实例显示效果
虚拟美术馆的“2010届美术专业毕业优秀作品展”展览俯视图如图3所示。图中有些展区的展品相同,那是因为展区还没添加展品,应用了默认展品。第一幅图旁边有显示了“作者:,标题:ximiling”白色信息栏,那是Anchor节点的description属性决定的。
图3 X3D场景的俯视图
单击场景中的第二展区的默认展品,即可添加展品信息。保存展品信息后,浏览界面回到场景如图4所示。
3 结语
虚拟美术馆的构建实例证明PHP动态生成X3D场景技术的可行性和实用性。PHP动态生成X3D场景技术可以应用在虚拟实验教学系统和虚拟图书馆系统等网上虚拟现实系统,也可以用于构建一个拥有虚拟场景的虚拟社区。
图4 添加展品后的俯视图
[1]Bisson S.An introduction to PHP[J].Application Development Advisor,2002,6(4):38 -41.
[2]张金钊.X3D虚拟现实设计-第二代立体网络程序设计语言[M].北京:电子工业出版社,2007.
[3]杜闯.PHP在动态网站开发中的优势[J].电脑知识与技术,2010,6(13):3342-3344.
[4]PHP5权威编程[M].简张桂,译.北京:电子工业出版社,2008.