虚拟现实学后感
-------- 虚拟现实期末论文
在一开始上虚拟现实课的时候,由于心态问题觉得一点收获也没有,直到自己开始做实验时才发现它原来有很多的奇妙之处。课上演示的那些例子很让我震撼,不管是多么复杂的东西都可以用软件实现出来。到了自己动手做的时候,就更觉得想做什么就能做什么,在前人的基础上做出了自己的东西,虽然很简单,却也感觉没有白学,至少我懂了它的很多功能和应用。实验都是自己做出来的。所以我知道x3d和VRML关系是这样的:VRML1.0→ VRML2.0 → VRML97 → X3D。
对于X3D,软件很容易造成死机,但为了编程方便还是用了下去。实际编程过程中,真的遇到了很多困难,调坐标调到头大,逼着自己继续做下去,耐心的完成。实验过程中有上网查询一些资料,感觉X3D这门技术不够成熟,因为除了官方网站以外,相关的技术论坛少之又少,对于自学这门技术造成了很大的障碍。例如在使用X3D编写碰撞节点的过程中,始终没有效果,上网查错误所在也查不到。但总之最后学下来的感觉就是自己懂得了一些原来不知道的东西。再比如说:网络上,虚拟现实的声音可做到环绕的效果,让声音来表达物体的方位,所以虚拟现实在网络方面的应用相当广泛,例如,教育方面,可以模拟物体的运动,星球的运行和飞机的模拟飞行;建筑方面,可以让买方知道房子建好时的实际的样子,不会买了房子之后才拼命后悔;而在娱乐方面更是有更好的效果,特别是现在的游戏。
我认为虚拟现实技术还是很强大很有用的,VRML和X3D的未来还是很有
前途的。实验中看到的效果就能够说明原因了。在这学期中,我们学习了许多有用的功能:造型、材质、编组、位置转换、文本、纹理、声音、光照、空间、视点导航、动画和各类传感器等等。通过老师提供的实例,我们清晰地看到了各类功能在使用上的差异,各自的优点和缺点,使得我们对这门技术有更深入的认识,更浓厚的兴趣。而且X3D编写的代码简单,功能实用对今后自己今后的发展有很大的帮助。
首先,我想先说一下虚拟现实技术(Virtual Reality)到底是什么。虚拟现实又称灵境技术。这种技术的特点在于,计算机产生一种人为虚拟的环境,这种虚拟的环境是通过计算机图形构成的三维数字模型,编制到计算机中去产生逼真的“虚拟环境”,从而使得用户在视觉上产生一种沉浸于虚拟环境的感觉,这就是虚拟现实技术的浸没感或临场参与感。
虚拟现实与通常CAD系统所产生的模型以及传统的三维动画是不一样的,它不是一个静态的世界,而是一个开放、互动的环境,虚拟现实环境可以通过控制与监视装置影响或被使用者影响,这是VR的第二个特征,即交互性。
接着就简单说一下虚拟现实的应用领域吧!
虚拟现实技术已经发展很多年,虚拟现实的应用领域也越来越广泛,Helsel与Doherty在1993年对全世界范围内已经进行的805项VR研究项目作了统计,结果表明:目前在娱乐、教育及艺术方面的应用占据主流,达21.4%,其次是军事与航空达12.7%,医学方面达6.13%,机器人方面占6.21%,商业方面占4.96%,另外在可视化计算、制造业、城市规划,室内设计,文物保护,交通模拟,虚拟现实游戏,工业设计,等方面都取得了巨大的发展,虚拟无限相信,
这是不可逆转的趋势,并且会运用更加广泛。
最后说一下虚拟现实中的一项具体技术。
在虚拟现实领域中,虚拟信息地理是其应用的重要的一个方面,在虚拟信息地理中,又包括虚拟城市、虚拟旅游、虚拟考古等等,这些都需要包含大量的地理信息数据,如何解决网络环境下三维环境的显示问题成为研究的一个热点和难点问题。利用X3D技术可以很好的解决三维地形的可视化问题。实现中,用本学期学习的ElevationGrid海拔栅格节点、TextureCoordinate纹理坐标节点、场景效果节点结合JAVA语言编程可以实现一个实现复杂的虚拟环境系统。 回顾一下这些节点的性质——
1.ElevationGrid海拔栅格节点是一个几何节点,X3D使用ElevationGrid创建高山、沙丘及不规则地表等空间造型。在水平平面上创建栅格,再在水平平面栅格上任选一点,改变这个点在y轴方向上的高度值,当增大该值就可形成高山,当减少该值就形成低谷;也可选择任意多个点以改变这些点的高度,创建处崎岖不平的山峦或峡谷等造型。看ElevationGrid的数据结构。xDimension和zDimension域指定了x轴和z轴方向上的栅格点的数量。xSpacing域和zSpacing域定义了栅格中行和列间的距离。xSpacing域值为x轴方向上计算的列间的距离,zSpacing域值为z轴方向上计算的行间的距离。它们的域值必须大于等于0.0。水平x轴的总长等于(xDimension-1)*xSpacing;垂直z轴的总长等于(zDimension-1)*zSpacing。Height域定义了海拔高度,也就是y轴方向上计算的海拔。该域值中的一个值对应以个栅格点。creaseAngle域定义了以个用弧度表示的折痕角。colorPerVertex定义了以个Color节点别应用于每个顶点上还是每个四边形上。
2.TextureCoordinate纹理坐标节点为基于顶点的几何体指定二维纹理坐标点,以便在基于顶点的多边形或平面上进行纹理贴图。将TextureCoordinate节点应用到ElevationGrid节点中,不仅使三维地形更加逼真,而且可以调整纹理图象中的曲率。
3. Normal法向量节点表示一个面或海拔栅格的朝向,它定义了一组用于几何几何节点的Normal域中的三维表面法向量。Normal法向量节点中的vector域定义了一个法向量列表,该表中的列表自动分配给海拔栅格中的每一部分,并以此控制其平面内部的明暗效果,使各角落之间的亮度平滑变化。
4. ViewPoint视点节点指定了用户视点在三维立体场景中的位置和方向,指定了某个观察位置在X3D场景中的三维坐标、立体空间朝向及视野范围等参数。NavigationInfo视点导航信息节点使用户可以使用多种类型的浏览方式,并且提供了一个虚拟替身。X3D提供了多种光照效果,而在三为地形中,使用的是太阳光,DirectionLight定向光源节点生成一个平行光源,光线从无限远处平行照射,不需要考虑光源的位置,并且不会随着距离变化而衰减,类似于阳光照射。DirectionLight定向光源节点可以动态改变方向来模拟一天中太阳光线的变化。
该实现的一个要点在于X3D与JAVA的组合。对于三维地形,仅仅是静态的显示是够的,需要对它进行动态的交互式的操作,使其能从不同的角度、不同的远近观察它。X3D中使用JAVA有两种方式,外部编程接口EAI和内部Script节点。Script节点就是利用Java或JavaScript语言编写的脚本来扩展X3D功能,它可以创建出新的内插节点和传感节点来驱动和控制整个虚拟空间。在Script节点的所有字段中,存在四种字段:field、eventIn、eventOut、exposedField。通过eventIn将事件传至Script节点中的脚本,然后在Script
节点中的脚本中进行处理,最后再通过eventOut将结果送回Script节点。EAI是External Authoring Interface的简称,它是一种X3D与外部环境的创作接口,定义了一套针对X3D浏览器的Java类,通过这些类,外部程序可以访问当前所运行的X3D世界,从而在外部直接操作、控制和修改X3D世界内部的场景,这里的外部程序主要是指与X3D嵌在同一WEB页上的JavaApplet程序。在JavaApplet中建立Browser对象标识一个唯一的X3D场景,并由此获得对X3D场景中已定义节点的引用。JavaApplet既可以控制X3D场景,也能进行与HTML等其他媒体的交互以及网络控制,从而可以实现复杂的虚拟环境系统。
地理信息系统是以计算机为工具实现数字化三维地形,文本利用X3D的图形功能在模拟三维方面进行了尝试,实现了三维地形的动态可视化(以上技术参考了《论文基于X3D的三维地形可视化研究》)。
随着计算机网络的快速发展,虚拟现实技术将得到迅速的发展和有力的支持。我看到VR 进一步拟在下一代互联网CNGI上搭建一个远程沉浸的协同工作空间,该空间通过虚实混合的手段,使分布的用户可以共享同一个虚拟工作空间,并提取其真人立体信息,实时叠加到该虚拟环境中,实现各参与者在同一个虚拟环境中进行可视地交互。
想象一下将来我们在网络上通过一定的设备支持进行“面对面”聊天、工作的场景,随着NGI的普及以及虚拟现实技术的发展,远程沉浸的虚拟协同工作将会进入大家的生活、工作中。相信今后的学习将有更加方便的环境,我们新的一代能在这么奇妙和高科技的时代生活学习,真的是幸运的未来。虽然虚拟现实只是我们的专业选修课,却能让我们更多的了解一些很多台前的人不了解的东西,这就是幕后人辛苦的结晶。感兴趣的人会学到很多,他们可以自学,我始终
认为,会的多才能站的稳!
因篇幅问题不能全部显示,请点此查看更多更全内容