三、虚拟家庭三维人体场景开发
虚拟家庭三维人体场景设计是利用虚拟现实程序设计语言X3D对虚拟家庭三维人体场景设计、布局和装饰进行开发、设计和编程。采用软件工程设计思想,融合传统软件开发模式和现代软件开发思想。创建逼真的虚拟家庭三维人体场景造型,使现实空间与虚拟空间相融合,感受虚拟现实技术的无穷魅力。虚拟现实虚拟家庭三维人体场景设计涵盖了虚拟家庭设计、装饰和布局,创建房屋建筑、室内各种三维立体造型,如虚拟人设计、大沙发、写字台、笔记本电脑、虚拟现实书、传真电话、大立柜、书柜、饮水器、茶几以及壁画等,利用动态交互智能感知节点实现三维动画场景设计,在虚拟现实场景中真正感受身临其境的效果。
虚拟家庭三维人体场景设计是利用软件工程思想开发设计,采用渐进式软件开发模式对虚拟家庭三维人体场景进行开发、设计、编码、调试和运行。虚拟现实虚拟家庭三维人体场景设计按照需求分析、设计和编码过程,循序渐进不断完善软件的项目开发。虚拟现实虚拟家庭三维人体场景设计由房屋设计、装饰和布局等组成,创建虚拟家庭场景和造型设计,包括沙发、茶几、壁画、大立柜、写字台、转椅、笔记本电脑、虚拟现实书、传真电话、窗帘和饮水器等。采用模块化、组件化设计思想,开发层次清晰、结构合理的虚拟现实虚拟家庭三维人体场景设计。虚拟现实虚拟家庭三维人体场景设计层次结构,如图5所示。

图5 虚拟家庭三维人体场景层次结构图
四、源程序实例
虚拟家庭三维人体场景设计利用虚拟现实程序设计语言X3D对虚拟家庭三维人体场景进行设计、编码和调试。利用现代软件开发的极端编程思想,采用绝对编程、自动测试、简单设计以及先测试后设计开发理念。融合结构化、组件化和模块化的设计思想,使软件开发设计层次清晰、结构合理。利用虚拟现实语言的各种节点创建生动、逼真的虚拟家庭三维人体场景。
使用背景节点创建背景空间场景,利用视角节点、坐标变换节点、纹理绘制节点创建壁画。利用内联节点、组节点、重定义节点、重用节点、几何节点以及复杂节点创建家俱、家用电器以及虚拟人场景和造型。利用内联节点实现子程序调用,实现模块化和组件化设计。利用时间传感器节点、动态插补器节点,即动态智能感知节点设计自动门。
利用X3D-Edit专用编辑器或记事本编辑器直接编写*.x3d源程序,在正确安装X3D-Edit专用编辑器前提下,启动X3D-Edit专用编辑器进行编程。利用X3D基本几何节点、背景节点、复杂节点以及动态感知节点等编写X3D源程序。
在X3D源程序实例/目录下,提供X3D源程序:px3d5.x3d源程序。
虚拟家庭三维人体场景设计px3d5.x3d源程序,利用X3D几何节点、复杂节点以及动态智能感知节点进行开发与设计编写源程序,利用面节点创建虚拟人,使用X3D背景节点、几何节点、纹理节点、内联节点以及复杂节点等设计编写,源程序展示如下。
虚拟家庭三维人体场景设计源程序:px3d5.x3d主程序
<?xml version="1.0" encoding="UTF-8"?>
<X3D profile="Immersive" version="3.1">
<head>
<meta content="px3d5.x3d" name="filename"/>
<meta content="zjz-zjr-zjd" name="author"/>
<meta content="*enter name of original author here*" name="creator"/>
<meta content="*enter copyright information here* Example: Copyright (c) Web3D Consortium
Inc. 2006" name="rights"/>
<meta content="*enter online Uniform Resource Identifier (URI) or Uniform Resource Locator
(URL) address for this file here*" name="identifier"/>
<meta content="X3D-Edit, http://www.web3d.org/x3d/content/README.X3D-Edit.html"
name="generator"/>
</head>
<Scene>
<Background DEF="_Background" groundAngle='1.05,1.6' groundColor='0.2 0.5
0.2,0.3 0.5 0.3,0.4 0.5 0.4' skyAngle='1.571' skyColor='0.2 0.2 1,1 1 1'>
</Background>
<Viewpoint DEF="_Viewpoint" jump='false' orientation='0 1 0 -1.571' position='1
0 -37.5' description="View1">
</Viewpoint>
<Viewpoint DEF="_Viewpoint_1" jump='false' orientation='0 1 0 -0.2' position='0
0 -5' description="View2">
</Viewpoint>
<Transform translation='11 0 -60'>
<Shape>
<Appearance>
<Material DEF="blue" ambientIntensity='0.2' diffuseColor='0.98
0.98 0.98' shininess='0.1' specularColor='0.8 0.8 0.9' transparency='0'>
</Material>
</Appearance>
<Box size='38.5 16.5 0.5'>
</Box>
</Shape>
</Transform>
<Transform rotation='0 1 0 1.571' translation='30 0 -45'>
<Shape DEF="wall">
<Appearance>
<Material USE="blue"/>
</Appearance>
<Box size='30 16.5 0.5'>
</Box>
</Shape>
</Transform>
<Transform rotation='0 1 0 1.571' translation='-8 0 -45'>
<Shape USE="wall"/>
</Transform>
<Transform translation='-0.8 0 -30'>
<Shape DEF="wallfront">
<Appearance>
<Material USE="blue"/>
</Appearance>
<Box DEF="_Box" size='15 16.5 0.5'>
</Box>
</Shape>
</Transform>
<Transform DEF="_Transform" translation='22.8 0 -30'>
<Shape USE="wallfront"/>
</Transform>
<Transform rotation='0 1 0 1.571' translation='11 5.5 -30'>
<Shape>
<Appearance>
<Material USE="blue"/>
</Appearance>
<Box size='0.5 5.5 9'>
</Box>
</Shape>
</Transform>
<Transform rotation='0 1 0 1.571' scale='0.05 0.05 0.05' translation='-3.5 -8 -48'>
<Inline url='"daligui.x3d"' bboxCenter='28.83 126.808 -29.8595'
bboxSize='343.8 291.222 109.397'/>
</Transform>
<Transform rotation='0 0 1 0' scale='0.05 0.05 0.05' translation='8 -8 -55'>
<Inline url='"dashafa.x3d"' bboxCenter='-4.995 44.117 -35.4774'
bboxSize='231.47 88.3606 100.978'/>
</Transform>
<Transform rotation='0 0 1 0' scale='12.5 12.5 12.5' translation='8 -8.37 -56'>
<Inline url='"woman.x3d"' bboxCenter='-0.016834 0.300249 0.10785'
bboxSize='0.402906 0.595243 0.291182'/>
</Transform>
<Transform rotation='0 0 1 0' scale='0.025 0.025 0.025' translation='8 -4.8 -48'>
<Inline url='"chaji.x3d"'/>
</Transform>
<Transform translation='7.5 2 -59.5'>
<Shape>
<Appearance>
<Material>
</Material>
<ImageTexture url='"0024.jpg"'>
</ImageTexture>
</Appearance>
<IndexedFaceSet coordIndex='0,1,2,3' solid='false' texCoordIndex='0,1,2,3'>
<Coordinate point='4 2 0,4 -4 0,-4 -4 0,-4 2 0'>
</Coordinate>
<TextureCoordinate point='1 1,1 0,0 0,0 1'>
</TextureCoordinate>
</IndexedFaceSet>
</Shape>
</Transform>
<Transform rotation='0 0 1 0' scale='0.025 0.025 0.025' translation='8.5 2.5 -60'>
<Inline url='"huakuang.x3d"'/>
</Transform>
<Transform rotation='0 1 0 3.141' scale='0.0015 0.0015 0.0015' translation='22.5 -8
-32.5'>
<Inline url='"shugui.x3d"' bboxCenter='403.6 3957.65 -426.8'
bboxSize='5560 8434.7 2087'/>
</Transform>
<Transform rotation='0 0 1 0' scale='0.0005 0.0005 0.0005' translation='20.5 5 -58.5'>
<Inline url='"kongtiao.x3d"'/>
</Transform>
<Transform rotation='0 1 0 1.57' scale='0.0055 0.0055 0.0055' translation='18.5 -7.9
-52.5'>
<Inline url='"zuozi.x3d"'/>
</Transform>
<Transform rotation='0 1 0 1.57' scale='0.008 0.008 0.008' translation='18.5 -2.9
-57.5'>
<Inline url='"chuanzhen.x3d"' bboxCenter='-13.1501 21.2187 33.3084'
bboxSize='264.88 78.9691 191.323'/>
</Transform>
<Transform DEF="cc1" rotation='0 1 0 1.571' scale='1.2 1.2 1.2' translation='18.5 -1.2
-53.5'>
<Inline url='"bijiben.x3d"'/>
</Transform>
<Transform rotation='0 1 0 1.571' scale='0.8 0.8 0.8' translation='18.5 -2.8 -48.5'>
<Inline url='"shumongxing.x3d"' bboxCenter='0 -0.04975 0' bboxSize='2.3
0.1005 3'/>
</Transform>
<Transform rotation='0 1 0 -1.57' scale='0.02 0.02 0.02' translation='26.5 -4.5 -53'>
<Inline url='"yizi.x3d"'/>
</Transform>
<Transform rotation='0 1 0 -1.571' scale='15 15 15' translation='22.5 -8.5 -53'>
<Inline url='"manchair.x3d"' bboxCenter='0.00567801 0.295608 0.06819'
bboxSize='0.242898 0.614502 0.363894'/>
</Transform>
<Transform rotation='0 1 0 -1.57' scale='0.005 0.005 0.005' translation='30 -1 -40.5'>
<Inline url='"chuanglian2.x3d"' bboxCenter='-1.45959 380.123 240.728'
bboxSize='2905 2528.26 519.037'/>
</Transform>
<Transform rotation='0 0 0 0.785' scale='4 4 4' translation='29.5 1 -40.5'>
<Shape>
<Appearance>
<ImageTexture url='"0207.jpg"'>
</ImageTexture>
</Appearance>
<Box size='0.01 3 3'>
</Box>
</Shape>
</Transform>
<Transform rotation='0 1 0 3.141' scale='0.01 0.01 0.01' translation='2.5 -6 -32.5'>
<Inline url='"yinshuiji.x3d"'/>
</Transform>
<Transform translation='11 5 -29.5'>
<Inline url='"rentimoxing.x3d"' bboxCenter='-0.0100002 0.127 0'
bboxSize='25.16 2.994 0.2'/>
</Transform>
<Group>
<Transform DEF="ldoor" rotation='0 1 0 1.571' translation='8.8 -2.8 -30'>
<Shape DEF="door">
<Appearance>
<Material>
</Material>
<ImageTexture url='"men001.jpg"'>
</ImageTexture>
</Appearance>
<Box size='0.5 11 4.3'>
</Box>
</Shape>
</Transform>
<Transform DEF="rdoor" rotation='0 1 0 1.571' translation='13.15 -2.8 -30'>
<Shape USE="door"/>
</Transform>
<TouchSensor DEF="Touch" enabled='true'>
</TouchSensor>
</Group>
<TimeSensor DEF="Time" cycleInterval='8' loop='false'>
</TimeSensor>
<PositionInterpolator DEF="flyinter1" key='0,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1' keyValue='13.15 -2.8 -29.8,14.15 -2.8 -29.8,15.15 -2.8 -29.8,16.15 -2.8 -29.8,17.15 -2.8 -29.8,16.15 -2.8 -29.8,15.15 -2.8 -29.8,14.15 -2.8 -29.8,13.15 -2.8 -29.8'>
</PositionInterpolator>
<PositionInterpolator DEF="flyinter2" key='0,0.1,0.2,0.4,0.5,0.6,0.7,0.8,1' keyValue='8.8 -2.8 -29.8,7.8 -2.8 -29.8,6.8 -2.8 -29.8,5.8 -2.8 -29.8,4.8 -2.8 -29.8,5.8 -2.8 -29.8,6.8 -2.8 -29.8,7.8 -2.8 -29.8,8.8 -2.8 -29.8'>
</PositionInterpolator>
<ROUTE fromNode="Touch" fromField="touchTime_changed" toNode="Time" toField="set_startTime"/>
<ROUTE fromNode="Time" fromField="fraction_changed" toNode="flyinter1"
toField="set_fraction"/>
<ROUTE fromNode="Time" fromField="fraction_changed" toNode="flyinter2"
toField="set_fraction"/>
<ROUTE fromNode="flyinter1" fromField="value_changed" toNode="ldoor"
toField="set_translation"/>
<ROUTE fromNode="flyinter2" fromField="value_changed" toNode="rdoor"
toField="set_translation"/>
</Scene>
</X3D>
虚拟家庭三维人体场景设计运行程序,首先,启动BS Contact VRML-X3D 7.0浏览器,然后打开“X3D源程序实例/px3d5.x3d”,即可运行虚拟家庭三维人体场景设计,如图6所示。

图6 虚拟家庭三维人体场景造型效果图
五、结束语
X3D虚拟人体开发与设计相对比较复杂,利用虚拟现实技术创建一个逼真“虚拟人”,利用虚拟现实技术制造出一个逼真“虚拟人”,虚拟现实技术对传统的医疗方式产生巨大的冲击,它为医学提供了许多新的治疗手段和方法。虚拟现实技术将成为外科手术、疾病诊断和治疗的有效手段,虚拟现实技术为传统医疗提供更加自然、便捷和有效的方式完成外科手术与治疗。此外,设计虚拟战场中的虚拟指挥员、虚拟士兵、虚拟主持人、虚拟教师、虚拟人生等。
利用虚拟人开发设计一个虚拟家庭环境,包括家居、人物、家用电器、电脑等,可以根据用户的爱好,在虚拟空间对家具位置进行摆放,对家具布料的色彩样式进行更换,最终达到满意的效果为止。
通过连续五次的讲述,由浅入深,循序渐进对X3D虚拟现实技术进行讲解,由于篇幅所限,只能将基本知识、重点、难点加以阐述。在宏观上对X3D虚拟现实技术有了一定认识,掌握了基本X3D编程方法和手段,希望读者能够在短时间内理解和掌握X3D虚拟现实动技术开发与设计技巧,达到事半功倍的效果。
参考文献
[1] 张金钊,张金镝,张金锐.虚拟现实三维立体网络程序设计语言.清华大学和北京交通大学出版社出版,2004-2
[2] 张金钊,张金锐,张金镝.X3D虚拟现实设计.电子工业出版社出版,2007-6.
[3] 张金钊,张金锐,张金镝.虚拟现实与游戏设计.冶金工业出版社出版,2007-6.
[4] 张金钊,张金锐,张金镝.VRML编程实训教程.清华大学和北京交通大学出版社出版,2008-1.
[5] 张金钊,张金锐,张金镝.X3D三维立体动画与与游戏设计.电子工业出版社出版,2008-2.
|