你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 跟高手学编程
X3D虚拟人体设计(下)
 

三、虚拟家庭三维人体场景开发

虚拟家庭三维人体场景设计是利用虚拟现实程序设计语言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.

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089