我要发帖 回复

新手上路

1

主题

15

积分

0

专家分

:

私信
发表时间 : 2006-9-1 14:28:19 | 浏览 : 6621    评论 : 5
一、VRML发展的历史
VRML的发展可以追溯到20世纪的最后10年,自1991年开始投入运营的WEB是VRML产生和发展的强大源动力.
VRML最初出现在1994年的瑞士日内瓦的W3会议上,Tim Berners-Lee,也就是Web的奠基人,对Mark Pesce的编程工作产生了浓厚的兴趣并邀请他给出名为"Cyberspace"的论文.这篇论文解释了一个名为Labyrinth的VRML 浏览器原型.该会议同时决定制订一种能够连接WEB的三维场景式描述语言,VRML这一术语也正是由HP公司欧洲研究实验室的Rava Raggett首先提出.
VRML的英文全称是Virtual Reality Modeling Language(虚拟现实建模语言).在最初的时候,M代表Markup,后来为了和HTML相区别,在W3会议之后的几个月内就把名称改为了Modeling,更能体现VRML的目的了.
1994年的11月第二界WWW会议召开,在这次会议上提出了VRML 1.0标准,但是由于功能尚不完善,只能完成简单三维场景的建立,无法实现互动,所以只是表现的一个静态的三维世界.1995年的八月,VAG(VRML架构小组)成立.95年的十月,VAG成员决定把工作重心放在引导方向,VRML 2.0由此产生.
VRML 2.0一方面继承了VRML1.0的基础,另一方面则将VRML由静态世界改造成动态世界,并强化了交互功能,增加了交互感应器,动画插补器,事件,路由,脚本,原型等诸多功能.
目前最新的标准是1997年由ISO审议并批准制订的VRML 97.
二、VRML的基本工作原理及其基本特性
VRML的工作原理是用文本信息描述三维场景,在Internet网上传输,在本地机上由VRML的浏览器解释生成三维场景,解释生成的标准规范即是VRML规范,而把复杂的处理任务交给本地机从而减轻了网路的负荷.
VRML建模语言具有以下主要技术特征:
1.基于C/S模式的访问方式. 其中服务器提供VRML文件,客户通过网络下载希望访问的文件,并通过本地平台的浏览器(Viewer)对该文件描述的VR世界进行访问;即VRML文件包含了VR世界的逻辑结构信息,浏览器根据这些信息实现许多VR功能.由于浏览器是本地平台提供的,从而实现了VR的平台无关性.
2.基于ASCII码的低带宽可行性:VRML像HTML一样,用ASCII文本格式来描述世界和链接,保证在各种平台上通用,同时也降低了数据量,从而在低带宽的网络上也可以实现.而且当VRML在本地运行时,由于不受网络带宽和传输的限制效果更佳.
3.实时3D着色引擎:传统的VR中使用的实时3D着色引擎在VRML中得到了更好的体现.这一特性把VR的建模与实时访问更明确的隔离开来,也是VR不同于三维建模和动画的地方.后者预先着色,因而不能提供交互性.VRML提供了6+1个自由度,即三个方向的移动和旋转,以及和其他3D空间的超链接(Anchor).
4.可扩充性:VRML作为一种标准,不可能满足所有应用的需要.有的应用希望交互性更强,有的希望画面质量更高,有的希望VR世界更复杂.这些要求往往是相互制约的,同时又受到用户平台硬件性能的制约,因而VRML是可扩充的,即可以根据需要定义自己的对象及其属性,并通过Java语言等方式使浏览器可以解释这种对象及其行为.
三、VRML的主要内容
1.VRML文件格式及MIME类型
VRML文件可以包括下列四个主要成份:VRML文件头, 造型和事件,脚本,路由,原型.并不是所有的文件都包括这些要素,唯一必须的是VRML文件头.
VRML 2.0标准的文件头为#VRML V2.0 utf8.这不同于1.0标准中的文件头,1.0标准中文件只支持ASCII字符集.为了向下兼容,VRML 2.0文件格式兼容1.0文件格式.这个文件头有三个含义:第一,表明这个文件是一个VRML文件;第二,符合VRML 2.0版本;第三,文件使用的是utf8字符集.
VRML注释允许在不影响VRML空间外观情况下,在VRML中包括其他信息.可以加入对文件内容,文件绘制的不同部分的注释.注释以一个#符号开始,结束于该行的最后.
VRML中的场景由造型组成,而造型则由节点创建.这些是VRML的构件.单个节点描述造型,颜色,光照,视点,以及造型,动画定时器,传感器,内插器等的定位和朝向等等.节点可以有零个域或多个域,VRML定义了20多种基本数据类型,主要有SF的单值类型及MF的多值类型.节点除了域属性外,还具有事件属性,事件是VRML实现用户交互及场景动态变化的最主要内容.概况说来,节点由域和事件组成,其中域的取值决定了节点的取值,从而决定了当前虚拟环境的状态;事件则为节点提供了接受外界信息以及向外界发送信息的能力.
MIME是英文Multipurpose Internet Mail Extensions—多用途Internet邮件扩展的缩写.它用来定义Internet上传送的文件内容类型的软件标准,所有的Web浏览器都能够理解MIME所定义的文件类型,并使用它们在浏览器上自动决定显示的信息内容.例如:如果一个MIME类型显示一个文件中包含VRML文本,那么浏览器将格式化VRML文本使其显示在浏览器的窗口中.一个MIME内容类型由用斜杠分开的两部分指定.第一部分说明内容的一般类型,象文本,音频,视频类型.第二部分说明内容的子类型,用于指定内容使用的确切格式.
MIME内容类型由Internet协会标准化,临时的或最新的MIME内容类型都以x-开始(x表示扩展).VRML非常新,以至于它现在使用下列扩展的MIME内容类型:x-world/x-vrml.将来,VRML的内容类型将融合进正式的MIME标准,并成为下列MIME内容类型:model/vrml.
2.VRML中的节点分类
VRML中的节点有以下几种类型:
·造型尺寸,外观节点:Shape,Appearance,Material
·原始几何造型节点:Box,Cone,Cylinder,Sphere
·造型编组节点:Group,Switch,Billboard
·文本造型节点:Text,FrontStyle
·造型定位,旋转,缩放节点:Transform
·内插器节点:
TimeSensor,PositionInterpolater,OrientationInterpolater,
ColorInterpolator, ScalarInterpolator,CoordinateInterpolator
·感知节点:
TouchSensor,CylinderSensor,PlaneSensor,SphereSensor,
VisibilitySensor,ProximitySensor,Collision
·点,线,面集节点:PointSet,IndexedLineSet,IndexedFaceSet,Coordinate
·海拔节点:ElevationGrid
·挤出节点:Extrusion
·颜色,纹理,明暗节点:
Color,ImageTexture,PixelTexture,MovieTexture,Normal
·控制光源的节点:PointLight,DirectionalLight,SpotLight
·背景节点:Background
·声音节点:AudioClip,MovieTexture,Sound
·细节控制节点:LOD
·雾节点:Fog
·空间信息节点:WorldInfo
·锚点节点:Anchor
·脚本节点:Script
·控制视点的节点:Viewpoint,NavigationInfo
·用于创建新节点类型的节点:PROTO,EXTERNPROTO,IS
四、VRML关键技术介绍
1.构建VRML文件的几种方法:
使用文本编辑器直接进行VRML文件的书写.这样做的不足之处是只能创建比较简单的物体和场景.创建复杂场景的时候,几乎不可能使用文本编辑器来直接编写.第一是因为场景之间相互关系和位置确定比较复杂,第二是对于复杂物体的建模显得无能为力,第三对数学能力要求较高.
一般的方法是使用可视化编辑器来建模.使用可视化编辑器避免了直接使用文本建模时的一些问题,例如不能生成复杂场景等.这些工具的一个突出的优点就是使用起来相当方便,它不需要手工地输入大量的命令而只需要轻轻拖动鼠标即可实现大量程序才可能完成的功能.
常见的几个可视化编辑器有:Cosmo World 2.0,3DMax,ISA等.
2.浏览VRML的方法及几种常见的VRML插件
浏览VRML的一般方法是使用VRML浏览器,也可以在IE等通用浏览器上通过VRML浏览器插件对VRML文件进行浏览.较常用的BS-Contact,blaxxun,Cortona等.
3.VRML中的动画效果
要理解VRML中动画的概念,必需首先理解路由和事件.为了使虚拟空间具有动感,构造指令可以包含绑定指令,绑定指令描述如何将节点绑定在一起.VRML绑定包括:绑定在一起的节点和在节点之间绑定的路由或者叫做路径.绑定两个节点之后,第一个节点通过这样的路径传送给第二个节点的信息叫作事件.事件包含一个值.当一个节点接收到一个事件时,它将根据节点的特征开始动画或者其它事情.通过绑定多个节点,用户可以创建许多路由,从而使空间更加具有动感.
大多数VRML节点都可以绑定在线路之上,每个节点都有输入,输出插座.一些节点同时具有输入,输出插座,而另外的一些节点仅有其中的一种.节点的输入插座称为eventIn,输出插座称为eventOut.当链接一个路由时,eventIn接受输入,eventOut将事件输出.
节点的每个输入输出路由也有类型,例如一个SFFloat类型的eventOut,当它绑定一个路由时,输出浮点数.SFFloat类型的eventIn,能够接收浮点值.创建路由之后,线路路由将处于睡眠状态,直到有一个事件从发送节点发送到接收节点.接收节点接收事件之后将作出反应,反应类型依赖于:
·接收事件节点的类型
·路由所绑定的节点输入插座
·事件所包含的数值
·当前节点的活动状态
VRML中的动画产生是由于变动了任何一个坐标系的位置,方向和形体比例,从而使物体按你所想的方式飞行,平移,旋转或按比例缩放.
TimeSensor节点的作用象一个时钟,它可以被用来执行开始,停止或者其他控制动画的动作.随着时间的流逝,这个传感器就会产生事件来表示时间的变化.通过将这些事件人TimeSensor节点的eventOut路由到其他节点,当TimeSensor节点的时钟计时时,你可以使这些节点发生相应的变化.如果要使一个坐标系平移,旋转和按比例缩放的话,你可以将TimeSensor节点事件路由至PositionInerpolator和OrientationInterpolator节点.这些节点中的每一个产生新的位置和旋转值,并通过他们的eventOut传送这些值.按顺序将这些值路由到Tranform节点,就可以使节点的坐标系随动画过程的发展而发生平移,旋转和按比例缩放.
4.VRML中的交互
要使你的空间具有交互性,可以给一个造型附带一个传感器,该传感器使用一个定点设备来感知观察者的动作.当观察者点击到一个附带有传感器的造型时,传感器就输出一个事件,这个事件就被路由到其它的节点来开始一个动画.
TouchSensor是一种用来检测观察者的接触和将事件输出的传感器.这些输出描述了在何时,何地,观察者接触到了可感知的造型.CylinderSensor,PlaneSensor和SphereSensor节点也可用来检测何时观察者接触到一个可感知的造型,并且提供了用来改变造型位置和方向的输出.
在VRML中,你可以将一个传感器附在一个造型上,用它来检测观察者的移动,点击和拖动.当观察者与一个可感知的造型相互作用时,你就可以把传感器的输出连入一个线路中,从而引起造型的移动和动画的播放.
感知观察者接近常使用三种方法:感知观察者的可视性,感知观察者的接近性和通过碰撞检测.
可见传感器从观察者的位置和方向来感知在空间中的一个长方体区域是否可视.你可以通过这些传感器来启动和停止动画或者控制其他的动作,这些动作仅当一个可感知的区域可见时是必要的.通过给出中心和尺寸,你可以指定一个由VisibilitySensor节点感测的空间区域.
碰撞检测是检测空间中观察者与造型接近和碰撞的时间.碰撞节点在检测观察者的碰撞时做两件事:通过CollideTime eventOut事件输出当前的绝对时间和提示浏览器.
以上就是VRML场景中的几种交互,使用这些交互我们可以做到类似电灯开启,自动滑动门等效果.但是更为复杂的交互使用它本身所提供的传感器就显得无能为力了,这就需要利用Script和Proto节点等对其进行功能上的扩展,最好是利用Java技术完成这些扩展工作.
五、创建自己的VRML世界
通过下面的一个动画,有助于我们更好的理解VRML,这个例子展示了一个小球做圆周运动的过程,鼠标单击可以控制球停止或继续滑动.
如下图:
   
附源代码:
#VRML V2.0 utf8
Background {skyColor 0.0 0.8 0.8}
DEF ball Transform{
translation 2.0 0.0 0.0         center        -2.0 0.0 0.0
children [Shape {appearance Appearance {
material Material {diffuseColor 1.0 0.0 0.0}}
geometry Sphere {radius .5}}
DEF TC TouchSensor {} ]
}       
DEF OI OrientationInterpolator {
key [0 .5 1]  keyValue [0 0 1 0,0 0 1 3.14, 0 0 1 6.28]}
DEF TS TimeSensor {
cycleInterval 10 loop  TRUE enabled TRUE }
DEF SC Script {
eventIn  SFTime touchTime
field SFBool enabled TRUE
eventOut SFBool        enabled_changed
url["javascript:
    function touchTime(value){
    enabled=!enabled;
    enabled_changed=enabled;
     }"]
}
ROUTE TC.touchTime TO SC.touchTime
ROUTE SC.enabled_changed TO        TS.set_enabled
ROUTE TS.fraction_changed TO OI.set_fraction
ROUTE OI.value_changed TO ball.set_rotation

最近VR访客

administrator专家组 评论于2006-9-1 14:34:06
不错 支持一下
土豆沙拉 评论于2006-9-1 15:37:01
顶一个!:)嗯,听说,vrml说容易也容易,就是些英文单词!说难也难,因为JAVA难学!他们说要想把vrml发挥到极致,得与Java结合!:L
maz 评论于2006-9-4 10:24:22
听说vrml还有很多扩展,比如GEOvrml,有做过开发的吗?
恳请介绍一下。:)
地球太危险了,我还是回火星去吧!~~~~~~~~
xuexxp 评论于2007-10-29 16:18:09
学习,路过
hilta1 评论于2009-12-31 13:46:51
学习了

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-2-25 06:51 PM

返回顶部