VRMLscriptWord文档下载推荐.docx
《VRMLscriptWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VRMLscriptWord文档下载推荐.docx(31页珍藏版)》请在冰点文库上搜索。
![VRMLscriptWord文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/23f29c0e-f350-4002-be33-d2d96b246fc4/23f29c0e-f350-4002-be33-d2d96b246fc41.gif)
whileStatement:
while(compoundExpression)statementBlock
returnStatement:
returncompoundExpression
return
breakStatement:
break
continueStatement:
continue
compoundExpression:
expression,compoundExpression
expression
optionalExpression:
compoundExpression
expression:
(compoundExpression)
-expression
!
expression
~expression
leftVariable=expression
leftVariable+=expression
leftVariable-=expression
leftVariable*=expression
leftVariable/=expression
leftVariable%=expression
leftVariable&
=expression
leftVariable|=expression
leftVariable^=expression
leftVariable<
<
leftVariable>
>
++expression
--expression
expression++
expression--
expression?
expression:
expression==expression
expression!
expression<
expression>
expression+expression
expression-expression
expression*expression
expression/expression
expression%expression
expression&
&
expression||expression
expression|expression
expression^expression
string
number
objectMethodCall
objectMemberAccess
functionCall
newconstructor
arrayDereference
variable
functionCall:
identifier(params)
constructor:
objectMethodCall:
expression.identifier(params)
objectMethodAccess:
expression.identifier
params:
params,expression
arrayDereference:
expression[compoundExpression]
leftVariable:
objectMethodAccess
variable:
string:
'
utf8'
number:
0{0-7}+
...ANSICfloatingpointnumber...
0X{0-9}+
0x{0-9}+
TRUE
true
FALSE
false
identifier:
utf8Character{utf8}*
utf8Character:
...anylegalUTF8characterexcept0-9...
utf8:
utf8Character
0-9
1.2对象与变量
数据在VRMLScript中被描述为对象。
对象类型对应于VRML的域。
一个变量包含对象的一个状态,并且可预先定义(在Script节点中)或局部定义。
1.2.1取值,命名
一个VRMLScript变量保存对象的一个状态。
如果一个Script节点的field或eventOut被定义,则与此同名的变量在Script节点中全程可用。
这个变量的类型与field或eventOut的类型一致。
(见数据变换)。
变量名必须以一个字母("
a"
—"
z"
或“A“—”z“),或下划线”_"
开头。
随后的字符可以是任何字母或数字。
变量名是区分大小写的?
变量可通过给新的变量名赋值来创建。
变量的类型总是最后被赋值的类型。
变量在它被初次引入的程序块范围内有效,Script节点中的field或eventOuts变量在整个节点范围内有效。
数字,布尔,字符串类型的文字可在VRMLScript中使用。
数字类型可以是十进制(417),十六进制(0x5C),或八进制(0177)形式。
也可为浮点(1.76)或指数(2.7e-12)形式。
所有的数字字符均为number类型。
布尔类型值为“true”或“false”类型为boolean。
字符串可以是在单引号('
)中的任何顺序的UTF8字符,类型为String。
特殊字符可按下列方式使用
字符
含义
\b
退格
\f
换页
\n
换行
\r
回车
\t
Tab
\'
单引号
\"
双引号
\\
\
举例:
Script{
fieldSFFloataField0
fieldSFVec3faVector000
eventOutSFInt32anEventOut
eventInSFBoolevent
url"
vrmlscript:
functionevent(value,timestamp){
if(aField==1.5){
a=true;
//'
a'
containsaboolean
}
if(a){//thisisNOTthesame'
asabove!
value=5;
//ERROR,
//can'
tassigntofunctionparameter!
aField=anEventOut;
//SFInt32convertedtoSFFloat
b=aField;
b'
containsanumber
b=anEventOut;
nowcontainsadifferentnumber
aField=aVector;
tassignSFVec3ftoSFFloat!
s='
Two\nLines'
;
s'
containsaString
}"
}
1.2.2对象与域
field变量保存的值为函数最后一次调用它的值。
EventOut变量与域变量很类似。
不同的是当一项任务分配了eventOut变量时,一个事件产生。
每个对象有一套属性和方法(见对象和函数定义)。
属性(使用"
."
操作符)用于表达式或表达式的对象。
方法(使用函数调用操作符)用于在对象上执行某些操作?
functionsomeFunction(){
a=newSFColor(0.5,0.5,0.5);
b=a.r;
contains0.5
a.setHSV(0.1,0.1,0.1);
nowcontainsnewproperties
值a.r对应于SFColor的红色属性。
方法a.setHSV()将颜色设置为HSV色彩模式。
1.2.3构造对象
每种类型对象有一个相应的构造函数。
构造函数允许使用灵活的参数对要构造的对象进行初始化。
MF对象实质上是0个以上相应的SF对象组成的数组。
使用关键词new与给定的数据类型可创造相应的对象。
例如:
a=newSFVec3f(0,1,0);
hasaSFVec3fcontaining0,1,0
b=newMFFloat(1,2,3,4)//'
hasaMFFloatcontaining4floats
1.2.4数据变换
数据变换的规则在下列表格列出:
类型
规则
String
∙数字或布尔转换为String
∙使用parseInt()或parseFloat()可把String转换为number
Number与boolean类型
∙将一个标量表达式赋给一个标量类型的固定变量(field或eventOut)时,转换为固定变量的类型
矢量类型
SFVec2f
SFVec3f
SFRotation
SFColor
∙只能与相同的类型组合
∙引用产生标量类型的值
SFImage
∙只容许赋值('
='
)和选择('
.'
)操作
∙只能赋值SFImage类型
SFNode
∙只能赋值SFNode类型
MFtypes
MFString
MFInt32
MFFloat
MFVec2f
MFVec3f
MFRotation
MFColor
MFNode
∙引用(myArray[3])产生相应的SF类型.
∙引用后的SF类型遵守的规则与普通的SF类型相同.
1.2.5MF对象
大多数SF对象在VRMLScript中有一相应的MF对象。
一个MF对象实质是上一个对象数组,数组的每个单元是相应的SF类型对象。
所有的MF对象有一个length属性用于返回或设置MF对象中单元的个数。
数组索引以0开头。
如果vecArray是一个MFVec3f对象则vecArray[0]是数组中的第一个SFVec3f对象。
1.3语句
VRMLScript语句与C语言语句相似。
一个语句可出现一个if或for声明后。
多重语句,或复合语句,必须被放在"
{"
与"
}"
之间。
所有语句必须以"
"
结束。
例子:
if(a<
b)
c=d;
//simplestatement,cislocaltotheifstatement
else{//compoundstatement,cisnolongerdefinedhere
e=f;
//eislocaltotheelseblock
c=h+1;
}//eisnolongerdefinedhere
1.3.1条件语句
if语句计算一个表达式,并选择2条语句之一。
简单的if语句中,如果表达的值不是0,则执行后面语句。
if...else语句中,如果表达式的结果是0,则执行else后的语句。
在if...else嵌套的语句中,else与最近的if匹配。
花括号能被用来打破这一限制。
1.3.2循环语句
循环语句包含3个表达式控制循环的执行。
循环语句在循环执行前执行它的第一个表达式。
在每次循环前计算它的第二个表达式,如果表达式值为0,退出循环,执行其他语句。
循环重复执行,直到第二表达式计算到0,或遇到一个break语句,循环被终止。
在典型的应用中,第一表达式初始化循环记数器,第二计算它,第三个对它进行累加。
while语句包含控制循环执行的一个单个的表达式,被循环的语句列在后面。
在每次循环前计算表达式,如果表达式值为0,退出循环。
否则它执行语句并且再测试表达式。
循环重复执行,直到表达式计算到0,或遇到一个break语句,循环被终止.
1.3.3表达式语句
在VRMLScript中任何有效的表达式都是一个语句两个最普通的表达式是函数调用和赋值表达式。
1.3.4Return语句
Return语句可不考虑嵌套结构而从函数中直接返回。
如果指定,其表达式可将计算结果返回被调用的函数。
if(a==0){d=1;
return5+d;
1.3.5Break语句
break语句退出嵌套循环。
执行跟在循环语句后的语句。
while(i<
0){if(q==5)break;
<
otherstatements>
//executioncommenceshereuponbreak.
1.3.6Continue语句
Continue语句跳到循环语句的最后。
执行在循环后的语句。
在for语句中,第二表达式测试第三个表达式的值,看循环是否应该继续。
在for...in语句中next单元被赋值且循环继续。
在while语句中表达式被测试是否循环应该继续。
foraincolorArray{if(a[0]>
0.5)continue;
//loopcommenceshereuponcontinue.
1.4符号
表达式用操作符把变量,对象,常数和其他表达式的值相结合。
a=b?
c:
d;
//tertiaryoperator
1.4.1赋值操作符
表达式=表达式可把右边表达式的结果赋与左边的表达式。
左表达式必须可以存储右边的变量。
包括简单的标识符,操作符,对象的成员,函数的返回值。
另外,二元表达式可使用缩写的方式:
‘+=’,‘-=’‘*=’,‘/=’,‘%=’,‘&
=’,‘|=’,‘^=’,'
,'
,‘>
=’。
a+=5;
//adds5tothevalueofaandassignsittoa
a[3]&
=0x0000FFFF;
//performsbitwise-andofa[3]and0x0000FFFF
//assigningresulttoa[3]
1.4.2算术操作符
算术操作符包括负号(“-”),补集(“~”),递加(“++"
),递减(”--“)和操作符(”+“,“-”,“*”,“/”,“%”)。
负号和补集是前缀。
递加和递减是前缀或后缀。
剩余是二元的。
5+b
(c+5)*7
(-b/4)%6
(c&
0xFF)|256
递增与递减操作符做前缀或后缀时会有不同的结果。
a=5;
//Valueof'
is5
b=a++;
is5,valueof'
is6
c=++b;
c'
is6,valueof'
1.4.3位操作符
位操作符包括与(“&
”),或(“|”),异或(“^”),左移(“<
),右移("
)。
这些都是二元操作符并且对任何标量类型有效。
当他们被使用时,标量的值在操作前被转换为SFInt32,运算后返回原来的表达式类型。
当把他们用于SFFloat或SFTime时,可能发生roundoff错误。
移动操作符左边指定操作数,右边指定移动位数。
a&
0x0FF//clearsupper24bitsof'
a>
5//shift'
5bitstotheright,signextend
1.4.4逻辑,比较操作符
逻辑表达式包括逻辑与('
),逻辑或('
||'
),逻辑非('
),比较操作('
'
=='
)。
每个表达式取值0(false)或1(true)。
常数true,false,TRUE,和FALSE都可使用。
a<
5
b>
0&
c>
1
((a>
4)||(b<
6))
1.4.5字符串操作符
所有的比较操作符可用来为词典排序的字符串作比较。
另外操作符+和“+=”能被用来连接两个字符串。
任何标量与的一个字符串连接,则标量首先转换为一个字符串,然后施行连接。
一个字符串要转换为标量类型可使用parseInt()与parseFloat()函数。
Aoneand'
+'
atwo'
//resultis"
Aoneandatwo"
Themagicnumberis'
+7//resultis'
Themagicnumberis7'
containsanSFTime
a+='
iscorrect'
isnowtheString'
5iscorrect'
1.4.6操作符优先级
相等优先级的操作顺序列在下面的表格中。
使用“(”与“)”括起的操作首先被执行。
优先操作规则:
操作符类型
操作符
注释
逗号
赋值
=+=-=*=/=%=
=>
=&
=^=|=
right-to-left
条件
?
:
tertiaryoperator
逻辑或
||
逻辑与
位或
|
位异或
^
位与
相等
==!
=
比较
>
位移动
加/减
+-
乘/除
*/%
取反/累加
~-++--
unaryoperators
引用,成员
()[].
2Script节点的url域支持的协议
脚本的url域可以引用包含VRMLScript的url代码:
Script{url"
vrmlscript:
协议允许脚本被如下嵌入:
Script{url"
functionfoo(){...}"
url域可以这样引用一个远端的文件或嵌入的代码:
Script{
url["
"
]
2.1文件扩展名
VRMLScript源代码的文件扩展名是.vs
2.2MIMEType
VRMLScript源代码的MIME类型如下定义:
application/x-vrmlscript
3处理EventIn事件
送到Script节点的事件被传递给相应的VRMLScript函数。
在Script节点的url域指定Script,是必要的。
函数的名字与eventIn一样,eventIn事件的值value和事件的发生时间timestamp作为参数传递,(看“参数传递和EventIn函数”)