云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > VRML的基础教程

VRML的基础教程

  • 62 次阅读
  • 3 次下载
  • 2025/6/22 22:36:10

] }

DEF cone Transform {

translation -5 0 0

children [ Shape {

appearance Appearance {

material Material { diffuseColor 0 0 1 } }

geometry Cone {} } ] }

] #end of Group children }

ROUTE touchBox.isActive TO view2.set_bind

把这个文件调入浏览器,然后把鼠标指向方块并按下左钮(先别松开!),可以看到视点已经变为view2,内部的机制我们已经很清楚:左钮按下时方块节点的接触检测器被触发,接着接触检测器从事件出口isActive送出一个事件“TRUE”,这个事件通过路由进入视点节点view2的事件入口set_bind,view2收到“TRUE”后成为当前视点,所以在我们眼前场景发生了变化。

现在松开左钮,可以看到场景恢复到原来方位,这种功能称为视点回跳,其原因是松开左钮后接触检测器向view2发送了一个“FASLE”事件,这样view2当前的地位被解除,原来的视点成为系统视点栈的栈顶节点(即当前视点),详细说明可参见标准中对视点节点的专门论述。如果我们不想视点回跳,就想停留在view2视点,那该怎么办呢?这种非系统缺省功能要自己来定义。

4。 利用脚本编写自定义行为 在VRML中,利用Script节点(脚本节点)定义用户自定义行为,所谓定义即用

脚本描述语言(Scripting Language)编写脚本的过程。VRML97支持的脚本描述语言目前有两种:Java和EMCAScript(这是JavaScript标准化后的名称),关于这两种语言本身,请参考相应参考书,VRML97标准中定义了它们和VRML的接口方法。应提请注意的是:VRML是基于节点的语言,所以脚本也是封装在Script这个特殊节点中的。这里我们不过多讨论脚本描述语言的细节,主要讨论把脚本集成到VRML文件中的方法。

上面我们曾把接触检测器touchBox 和视点view2直接通过路径连接起来,现在要定义我们指定的行为,就需要在二者之间插入一个脚本节点,也就是让路径绕个弯: ROUTE touchBox.isActive TO touchScript.touchBoxIsActive

ROUTE touchScript.bindView2 TO view2.set_bind

其中的脚本节点touchScript有一个事件人口touchBoxIsActive和一个事件出口bind_View2,前者接收来自接触检测器touchBox的事件,然后经自己的脚本处理后,把结果发送给视点节点view2:

DEF touchScript Script {

eventIn SFBool touchBoxIsActive

eventOut SFBool bindView2

url\

function touchBoxIsActive(active) {

bindView2= TRUE; }\ }

关于这个Script节点,请注意一下几点:(1)它的事件入口touchBoxIsActive和事件出口bindView2是自定义的,其它VRML节点的域和事件都是固定的。(2)事件入口touchBoxIsActive(即入事件)和事件出口bindView2(即出事件)的类型都是SFBool(单值布尔型),touchBox的事件出口isActive和view2的事件入口set_bind的类型也是相同的。(3)“url”是脚本节点的一个域,可以直接包含脚本,也可以包含一个或多个用URL地址指示的脚本,若有多个地址,则按照先后次序获取第一个可得到的脚本。(4)脚本是以函数(function)的形式给出的,函数名touchBoxIsActive 与事件入口的名称相同,这是和ECMAScript语言的接口约定,表示相应事件入口收到事件后调用此函数进行处理。

5.事件流程与小结

下面我们整理一下事件流程:

(1)用户在方块上按下鼠标左键。

(2)接触检测器发出一个“TRUE”事件。

(3)此事件进入脚本节点touchScript的事件入口touchBoxIsActive.

(4)调用脚本函数touchBoxIsActive(注意函数并没有判断入事件的值)。

(5)函数向touchScript的事件出口bindView2发送一个“TRUE”事件(还可以进行其它判断或执行其它事件)。

(6)view2节点收到“TRUE”事件,成为当前视点。按照VRML约定,“认为”上述事件是同时发生的,也就是这些事件的时间戳相同。

(7)若用户松开鼠标左键,则接触检测器发出一个“FALSE”事件,此事件同样引起脚本函数调用并发送“TRUE”事件,所以view2仍然保持为当前视点。

本节的完整代码是:

#VRML V2.0 utf8

DEF view1 Viewpoint {

position 0 0 20

description \ }

DEF view2 Viewpoint {

position 5 0 20

description \ } Group {

children [

DEF box Transform {

translation 5 0 0

children [

Shape {

appearance Appearance {

material Material { diffuseColor 1 0 0 } }

geometry Box {} }

DEF touchBox TouchSensor {} ] }

DEF sphere Transform {

translation 0 0 0

children [ Shape {

appearance Appearance {

material Material { diffuseColor 0 1 0} }

geometry Sphere {} } ] }

DEF cone Tranform {

transltion -5 0 0

搜索更多关于: VRML的基础教程 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

] } DEF cone Transform { translation -5 0 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0 0 1 } } geometry Cone {} } ] } ] #end of Group children } ROUTE touchBox.isActive TO view2.set_bind 把这个文件调入浏览器,然后把鼠标指向方块并按下左钮(先别松开!),可以看到视点已经变为view2,内部的机制我们已经很清楚:左钮按下时方块节点的接触检测器被触发,接着接触检测器从事件出口i

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com