VRMLScript教程

2018-11-01 11:29

下面是我曾经使用的教程。你拷下来自己慢慢看喽。

VRMLs cript

作者:gbnis 已阅读次数:743

--------------------------------------------------------------------------------

VRMLs cript是Javas cript的一个子集,支持VRML数据类型,有其他脚本语言不及的特性:

s cript可以源代码,单独的URL形式引入。 直接支持VRML 2.0的所有数据类型。

使用单独的函数接收外部事件,可以简化开发过程,提高处理速度。 使用简单的赋值向外部发送事件。

在表达式中可直接使用标量数据(SFTime, SFInt32, SFFloat, SFBool)。Javas cript 数据对象可直接转换为此四种数据类型的任意一种。例如,你可用a = time + 3使SFTime变量增加3秒。 可使用构造器轻松创建与转换大多数的数据类型。 数据与字符串对象与全部Javas cript函数兼容。

全部Javas cript string 方法与属性可用。标量可自动转化为字符串。 -------------------------------------------------------------------------------- 1 语言 1.1 BNF 语法 1.2 对象与变量 1.2.1 取值与命名 1.2.2 对象与域 1.2.3 构造对象 1.2.4 数据变换 1.2.5 MF 对象 1.3 语句 1.3.1 条件语句 1.3.2 循环语句 1.3.3 表达式语句 1.3.4 Return 语句 1.3.5 Break 语句 1.3.6 Continue 语句 1.4 符号 1.4.1 赋值操作符 1.4.2 算术操作符 1.4.3 位操作符

1.4.4 逻辑,比较操作符 1.4.5 字符串操作符 1.4.6 操作符优先级

2 s cript 节点的 url 域支持的协议 2.1 文件扩展名 2.2 MIME 类型 3 处理 EventIn

3.1 参数传递与 EventIn 函数 3.2 eventsProcessed() 方法 3.3 initialize() 方法 3.3 shutdown() 方法 4 访问 Fields 与 Events

4.1 访问s cript的 Fields 与 EventOuts 4.2 访问其他节点的 Fields 与 EventOuts 4.3 发送 EventOuts 5 对象与函数定义

5.1 parseInt 与 parseFloat 函数 5.2 Browser 对象 5.3 Math 对象 5.4 SFColor 对象 5.5 SFImage 对象 5.6 SFNode 对象 5.7 SFRotation 对象 5.8 String 对象 5.9 SFVec2f 对象 5.10 SFVec3f 对象 5.11 MFColor 对象 5.12 MFFloat 对象 5.13 MFInt32 对象 5.14 MFNode 对象 5.15 MFRotation 对象 5.16 MFString 对象 5.17 MFVec2f 对象 5.18 MFVec3f 对象 5.19 VrmlMatrix 对象 6 例子:

-------------------------------------------------------------------------------- 1 语言

VRMLs cript与Javas cript具有相似的语法形式

1.1 BNF 语法 s cript : functions NULL

functions: functions function function function:

function beginFunction ( args ) statementBlock beginFunction: identifier args:

args , identifier identifier NULL stmntblk: { statements } { } statement statements : statements statement statement statement : ifStatement forStatement whileStatement returnStatement ; breakStatement ; continueStatement ; compoundExpression ; ifStatement :

if ( compoundExpression ) statementBlock

if ( compoundExpression ) statementBlock else statementBlock forStatement :

for ( optionalExpression ; optionalExpression ; optionalExpression ) statementBlock

whileStatement :

while ( compoundExpression ) statementBlock returnStatement :

return compoundExpression return

breakStatement : break

continueStatement : continue

compoundExpression :

expression , compoundExpression expression

optionalExpression: compoundExpression NULL

expression : ( compoundExpression ) - expression ! expression ~ expression

leftVariable = expression leftVariable += expression leftVariable -= expression leftVariable *= expression leftVariable /= expression leftVariable %= expression leftVariable &= expression leftVariable |= expression leftVariable ^= expression leftVariable <<= expression leftVariable >>= expression 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 expression % expression expression && expression expression || expression expression & expression expression | expression expression ^ expression expression << expression expression >> expression expression >>> expression string

number

objectMethodCall objectMemberAccess functionCall new constructor arrayDereference variable functionCall : identifier ( params ) constructor : identifier ( params ) objectMethodCall :

expression . identifier ( params ) objectMethodAccess : expression . identifier params :

params , expression expression NULL

arrayDereference :

expression [ compoundExpression ] leftVariable : objectMethodAccess arrayDereference variable variable : identifier string: ' utf8 ' number: 0{0-7}+

... ANSI C floating point number ... 0X{ 0-9 }+ 0x{ 0-9 }+ TRUE true FALSE false identifier:

utf8Character { utf8 }* utf8Character:

... any legal UTF8 character except 0-9 ... utf8: utf8Character

0-9

1.2 对象与变量

数据在 VRMLs cript 中被描述为对象。对象类型对应于VRML的域 。一个变量包含对象的一个状态,并且可预先定义 ( 在 s cript 节点中 ) 或局部定义。

1.2.1 取值, 命名

一个VRMLs cript变量保存对象的一个状态。如果一个s cript节点的field或eventOut被定义 ,则与此同名的变量在 s cript 节点中全程可用。这个变量的类型与field或eventOut的类型一致。( 见数据变换 ) 。

变量名必须以一个字母 (\—\或“A“—”z“), 或下划线”_\开头。随后的字符可以是任何字母或数字。变量名是区分大小写的?

变量可通过给新的变量名赋值来创建。变量的类型总是最后被赋值的类型。变量在它被初次引入的程序块范围内有效,s cript节点中的field或eventOuts变量在整个节点范围内有效。

数字, 布尔, 字符串类型的文字可在VRML s cript中使用。数字类型可以是十进制 ( 417 ), 十六进制 ( 0x5C ), 或 八进制 ( 0177 ) 形式。也可为浮点 ( 1.76 ) 或指数 ( 2.7e-12 ) 形式。所有的数字字符均为 number 类型。布尔类型值为“true”或“false”类型为 boolean 。字符串可以是在单引号 (') 中的任何顺序的 UTF8 字符,类型为 String。特殊字符可按下列方式使用

字符 含义 \\b 退格 \\f 换页 \\n 换行 \\r 回车 \\t tab \\' 单引号 \\\双引号 \\\\ \\ 举例: s cript {

field SFFloat aField 0

field SFVec3f aVector 0 0 0

eventOut SFInt32 anEventOut

eventIn SFBool event

url \

function event(value, timestamp) {

if (aField == 1.5) {

a = true; // 'a' contains a boolean }

if (a) { // this is NOT the same 'a' as above!

value = 5; // ERROR,

// can't assign to function parameter! }

aField = anEventOut; // SFInt32 converted to SFFloat

b = aField; // 'b' contains a number

b = anEventOut; // 'b' now contains a different number

aField = aVector; // ERROR,

// can't assign SFVec3f to SFFloat!

s = 'Two\\nLines'; // 's' contains a String }\ }

1.2.2 对象与域

field变量保存的值为函数最后一次调用它的值。EventOut变量与域变量很类似。不同的是当一项任务分配了eventOut变量时,一个事件产生。

每个对象有一套属性和方法(见对象和函数定义)。属性(使用\操作符)用于表达式或表达式的对象。方法(使用函数调用操作符)用于在对象上执行某些操作? 举例:

function someFunction() {

a = new SFColor(0.5, 0.5, 0.5);

b = a.r; // 'b' contains 0.5

a.setHSV(0.1, 0.1, 0.1); // 'a' now contains new properties }

值a.r对应于SFColor的红色属性。方法a.setHSV()将颜色设置为HSV色彩模式。

1.2.3 构造对象

每种类型对象有一个相应的构造函数。构造函数允许使用灵活的参数对要构造的对象进行初始化。MF对象实质上是0个以上相应的SF对象组成的数组。使用关键词 new 与给定的数据类型可创造相应的对象。例如:

a = new SFVec3f(0, 1, 0); // 'a' has a SFVec3f containing 0, 1, 0

b = new MFFloat(1, 2, 3, 4) // 'b' has a MFFloat containing 4 floats 1.2.4 数据变换

数据变换的规则在下列表格列出:

类型 规则

String 数字或布尔转换为String

使用 parseInt() 或 parseFloat() 可把 String 转换为 number

Number 与 boolean 类型 将一个标量表达式赋给一个标量类型的固定变量(field 或 eventOut)时,转换为固定变量的类型

矢量类型 SFVec2f SFVec3f SFRotation

SFColor 只能与相同的类型组合 引用产生标量类型的值

SFImage 只容许赋值 ('=') 和 选择('.') 操作

只能赋值 SFImage 类型

SFNode 只容许赋值 ('=') 和 选择('.') 操作 只能赋值 SFNode 类型

MF types MFString MFInt32 MFFloat MFVec2f MFVec3f MFRotation MFColor

MFNode 只能与相同的类型组合 引用 (myArray[3]) 产生相应的 SF 类型.

引用后的 SF 类型遵守的规则与普通的 SF 类型相同.

1.2.5 MF 对象

大多数SF对象在VRMLs cript中有一相应的MF对象。一个MF对象实质是上一个对象数组, 数组的每个单元是相应的 SF 类型对象。所有的 MF 对象有一个length属性用于返回或设置MF对象中单元的个数。数组索引以 0 开头。如果 vecArray 是一个 MFVec3f 对象则 vecArray [ 0 ] 是数组中的第一个SFVec3f 对象。

1.3 语句

VRMLs cript 语句与 C 语言语句相似 。一个语句可出现一个 if 或 for 声明后。多重语句,或复合语句, 必须被放在\与\之间 。所有语句必须以\结束。 例子:

if (a < b)

c = d; // simple statement, c is local to the if statement

else { // compound statement, c is no longer defined here

e = f; // e is local to the else block

c = h + 1;

} // e is no longer defined here 1.3.1 条件语句

if 语句计算一个表达式,并选择2条语句之一。简单的if语句中,如果表达的值不是 0 ,则执行后面语句。if...else 语句中,如果表达式的结果是 0 ,则执行else后的语句。在if...else嵌套的语句中, else与最近的if匹配。花括号能被用来打破这一限制。 例子:

if (a < 0) // simple if statement

if (a == 0)

if (b > 5) // if...else statement

else // this else clause matches the 'if (b > 5)' statement

if (a == 0) {

if (b > 5)

}

else // this else clause matches the 'if (a == 0)' statement

1.3.2 循环语句

循环语句包含3个表达式控制循环的执行 。循环语句在循环执行前执行它的第一个表达式。在每次循环前计算它的第二个表达式, 如果表达式值为 0 ,退出循环,执行其他语句。循环重复执行, 直到第二表达式计算到 0 ,或遇到一个 break 语句,循环被终止。在典型的应用中,第一表达式初始化循环记数器, 第二计算它, 第三个对它进行累加。

例子:

for (i = 0; i < 10; ++i)

while 语句包含控制循环执行的一个单个的表达式,被循环的语句列在后面。在每次循环前计算表达式, 如果表达式值为 0 ,退出循环。否则它执行语句并且再测试表达式。循环重复执行,直到表达式计算到 0 ,或遇到一个 break 语句,循环被终止. 例子:

while (i < 10)

1.3.3 表达式语句

在 VRMLs cript 中任何有效的表达式都是一个语句 两个最普通的表达式是函数调用和赋值表达式 ( 看下面 ) 。

1.3.4 Return 语句

Return 语句可不考虑嵌套结构而从函数中直接返回。如果指定,它的表达式可将计算结果返回被调用的函数。 例子:

if (a == 0) { d = 1;

return 5 + d; }

1.3.5 Break 语句

break语句退出嵌套循环。执行跟在循环语句后的语句。 例子:

while (i < 0) {

if (q == 5) break;

}

// execution commences here upon break. 1.3.6 Continue 语句

Continue 语句跳到循环语句的最后。执行在循环后的语句。在for语句中,第二表达式测试第三个表达式的值,看循环是否应该继续。在for...in语句中next单元被赋值且循环继续。在 while 语句中表达式被测试是否循环应该继续。 例子:

for a in colorArray {

if (a[0] > 0.5)

continue;

// loop commences here upon continue. } 1.4 符号

表达式用操作符把变量,对象,常数和其他表达式的值相结合。 例子:

a = -b; // unary prefix operator

a = b++; // unary postfix operator

a = b + c; // binary operator

a = b ? c : d; // tertiary operator

a = b * c + d; // compound expression

// the product of b * c produces a value which

// is added to d

1.4.1 赋值操作符

表达式 = 表达式可把右边表达式的结果赋与左边的表达式。左表达式必须可以存储右边的变量。包括简单的标识符, 操作符,对象的成员,函数的返回值。 例子:

a = 5; // simple assignment

a[3] = 4; // subs cripted assignment

foo()[2] = 3; // function returning an MFField

另外,二元表达式可使用缩写的方式:?+=?,?-=??*=?,?/=?,?%=?,?&=?,?|=?,?^=?,'<<=','>>=',?>>>=?。 例子:

a += 5; // adds 5 to the value of a and assigns it to a

a[3] &= 0x0000FFFF; // performs bitwise-and of a[3] and 0x0000FFFF

// assigning result to a[3] 1.4.2 算术操作符

算术操作符包括负号 (“-”), 补集 (“~”), 递加 (“++\递减 (”--“) 和操作符 (” +“, “ - ”, “ * ”, “ / ”, “ % ” ) 。负号和补集是前缀。递加和递减是前缀或后缀 。剩余是二元的。 例子: 5 + b

(c + 5) * 7

(-b / 4) % 6

(c & 0xFF) | 256

递增与递减操作符做前缀或后缀时会有不同的结果。 例子:

a = 5; // Value of 'a' is 5

b = a++; // Value of 'b' is 5, value of 'a' is 6

c = ++b; // Value of 'c' is 6, value of 'b' is 6

1.4.3 位操作符

位操作符包括与 ( “&” ), 或 ( “ | ” ), 异或 ( “ ^” ), 左移 ( “ <<'), 右移 (\。这些都是二元操作符并且对任何标量类型有效。当他们被使用时,标量的值在操作前被转换为 SFInt32 ,运算后返回原来的表达式类型。当把他们用于 SFFloat 或 SFTime 时,可能发生 roundoff 错误。移动操作符左边指定操作数,右边指定移动位数。 例子:

a & 0x0FF // clears upper 24 bits of 'a'

a >> 5 // shift 'a' 5 bits to the right, sign extend 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 () 函数。 例子:

'A one and ' + 'a two' // result is \

'The magic number is ' + 7 // result is 'The magic number is 7'

a = 5; // 'a' contains an SFTime

a += 'is correct'; // 'a' is now the String '5 is correct' 1.4.6 操作符优先级

相等优先级的操作顺序列在下面的表格中。使用“ ( ”与“ ) ”括起的操作首先被执行。 例子:

a = b + c * d; // c * d is evaluated first

a = (b + c) * d; // b + c is evaluated first

a = b * c / d; // b * c is evaluated first

// ('*' and '/' have equal precedence, evaluation

// order is left-to-right) 优先操作规则:

操作符类型 操作符 注释 逗号 ,

赋值 = += -= *= /= %=

<<= >>= >>>= &= ^= |= right-to-left 条件 ?: tertiary operator 逻辑或 || 逻辑与 && 位或 | 位异或 ^ 位与 & 相等 == != 比较 < <= > >= 位移动 << >> >>> 加/减 + - 乘/除 * / %

取反/累加 ! ~ - ++ -- unary operators 引用, 成员 () [] .

--------------------------------------------------------------------------------

2 s cript 节点的 url 域支持的协议

脚本的 url 域可以引用包含 VRMLs cript 的url代码:

s cript { url \

s cript { url \ url 域可以这样引用一个远端的文件或嵌入的代码: s cript {

http://foo.com/mys cript.vs\

vrmls cript :协议允许脚本被如下嵌入::

url [ \

http://foo.com/mys cript.vs\

\ }

2.1文件扩展名

VRMLs cript 源代码的文件扩展名是 .vs

2.2MIME Type

VRMLs cript 源代码的 MIME 类型如下定义:

application/x-vrmls cript

--------------------------------------------------------------------------------

3 处理 EventIn 事件

送到s cript节点的事件被传递给相应的 VRMLs cript 函数。在s cript节点的 url 域指定s cript,是必要的。函数的名字与 eventIn 一样,eventIn 事件的值value和事件的发生时间 timestamp 作为参数传递,( 看“参数传递和 EventIn 函数” ) 。如果在s cript中没有定义相应的 VRMLs cript 函数,则浏览器无法执行相应操作。

例如, 下列s cript节点有一个eventIn 域其名字是start : s cript {

eventIn SFBool start

url \ }

在上面的例子中,当start eventIn 事件发出时 start() 函数被执行。

3.1 参数传递与 EventIn 函数

当s cript节点收到一个 eventIn 时,在url域被指定的一个相应的函数被调用, 它有两个参数。eventIn 的值value作为第一个参数被传递, timestamp 作为第二参数被传递, 。value的类型与 EventIn 的类型一样, timestamp 的类型是 SFTime 。

3.2eventsProcessed() 方法

作者可以定义名为 eventsProcessed 的函数,此函数在收到一系列事件以后被调用。实际编程中有一些运算过程需要在每一个EventIn函数返回后执行,另外一些需要当几个EventIn函数返回后才执行。对于后者的情况,创作者可把不必每次运行的执行过程放入eventsProcessed函数

例子:

创作者需要在动画运行的每步完成一个复杂的运动学运算。利用一个按钮形状与TouchSensor实现动画的单步播放。通常只要按钮被按下则执行一个EventIn函数,此函数增加运算次数,而后运动学运算进行。每次按钮被按下时都要运行复杂的运算,而用户按按钮的速度往往超过复杂运算的速度。为解决此问题,可让EventIn函数只处理累加运算次数,而把运动学运算放入eventsProcessed函数。有效的用户点击操作组成队列,当用户快速点击按钮时,时间步随点击次数增加,而复杂的运算只执行一次。此方法可使动画运行与用户操作同步。 eventsProcessed函数无参数。

3.3initialize() 方法

作者可以定义命为名initialize()的函数,此函数在s cript节点被装载且无任何事件处理之前被调用。常用于初始化数据,为接收事件作准备。

initialize()函数无参数。s cript节点装载时执行。

3.3shutdown() 方法

作者可以定义名为shutdown()的函数,此函数当相应的s cript节点被删除,卸载,替代时调用,能通知浏览器 s cript节点正被删除。因此他们能用来清理事件, 等等。

shutdown 函数无参数。s cript节点被删除时执行 。

--------------------------------------------------------------------------------

4 访问域

s cript节点的域, eventIns 和 eventOuts 可以由 VRMLs cript 函数访问。所有节点的域仅能在s cript内被访问到。s cript节点的 eventIns 可以被传入, eventOuts 可以被发出。

4.1 访问s cript节点的域与 EventOut

在Scrip节点中可通过域名使用被定义了的域值。域值可以被读取/写入。域值被函数调用前是不变的。s cript节点中的 EventOuts 也能被读取。其值是最后发送的值。

4.2 访问其他节点的域和 EventOuts

通过一个指针,s cript可以访问任何其他节点的 exposedField , eventIn 或 eventOut :

DEF SomeNode Transform { } s cript {

field SFNode node USE SomeNode

eventIn SFVec3f pos

directOutput TRUE url \

function pos(value) {

node.set_translation = value; }\ }

以上例子发送一个 set_translation eventIn 到 Transform 节点。 传递节点中的域不能被存取,但是 exposedFields 可以用“ set_...“ 发送事件到eventIn , 或用”..._changed “从eventOut读当前值 。以上符合 VRML 路由规则。

4.3 发送 EventOuts

当执行的函数运行完毕后发送这个事件。这意味在函数执行一次的过程中eventOut被多次赋值,只有最后赋值的 eventOut 被送出。

--------------------------------------------------------------------------------

5 对象和函数定义

在 VRMLs cript 中,对象有其固定的设置, 有其各自的属性( 即值 ) 和方法 ( 即函数 ) 。包括以下内容:

5.1 parseInt 和 parseFloat 函数

这两个函数把 String 值转换为 SFInt32 值或 SFFloat 值。

parseInt(s, [radix])

可使用“基数”选项将字符串“ s ”转换为整型数值。如果基数被省略,10 为默认的基数。number可以是十进制 ( 123 ), 十六进制 ( 0x5C ) 或 八进制 ( 0177 )。遇到无法识别的字符转换会终止于此字符。如果字符串开头是无法识别的字符, 函数反回值为 0 。 parseFloat(s)

函数将字符串“ s ”转换为浮点型数值。数值可以为常用形式 ( 1.23 ) 或指数 ( 12E3 )形式。遇到无法识别的字符转换会终止于此字符。如果字符串开头是无法识别的字符, 函数反回值为 0 。 5.2Browser 对象

这一节列出在浏览器对象中可用到的方法, 它允许 s cripts 获得并且设置浏览器信息。

创建方法 None.

属性 无 方法

String getName()

获取 VRML 浏览器的名字。 String getVersion()

获取 VRML 浏览器的版本 SFFloat getCurrentSpeed() 获取当前场景的流畅度数值。 SFFloat getCurrentFrameRate() 获取当前场景每秒渲染贞数。 String getWorldURL()

获取当前被装载的场景的 URL 。 void replaceWorld(MFNode nodes) 以参数中的节点替代当前的场景。

MFNode createVrmlFromString(String vrmlSyntax) 由参数中的VRML语法字符串产生场景。

void createVrmlFromURL(MFString url, Node node, String event)

当 String 指定的事件发出时,由 URL 导入 VRML 场景。事件是被传递 MFNode 节点的 eventIn 域。 void addRoute(SFNode fromNode, String fromEventOut, SFNode toNode, String toEventIn) 从 eventOut 增加一路由到 eventIn 。

void deleteRoute(SFNode fromNode, String fromEventOut, SFNode toNode, String toEventIn) 删除 eventOut 与 eventIn 之间的路由。 void loadURL(MFString url, MFString parameter)

装载 URL , 使用参数可以重定向此url到另外的结构。如果目的地是当前场景包含的结构,这个方法可以无返回。

void setDes cription(String des cription)

设置由浏览器显示的描述性文字。这与 Anchor 节点的des cription 域功能一样。 5.3Math 对象

Math对象在 VRMLs cript 中是唯一有确切对象的例子。属性可用 Math.<属性名> 访问,方法可用 Math.<方法名> (参数)。

创建方法 无 属性 E

常数, e , 近似 2.718 LN10

10 的自然的对数, 近似 2.302 LN2

2 的自然的对数, 近似 0.693 PI

圆周率, 近似 3.1415 SQRT1_2

?的平方根, 近似 0.707 SQRT2

2的平方根, 近似 1.414 方法

注 number, number1, number2, base, and exponent 为标量表达式.

abs(number)

返回number的绝对值 acos(number)

返回反余弦 ( 弧度制) number asin(number)

返回反正弦 ( 弧度制) number atan(number)

返回反正切 ( 弧度制) ceil(number) 取整 cos(number) 返回number的余弦 exp(number) e 的number次乘方 floor(number)

返回小于等于number的整数 log(number)

自然对数 ( 以 e 为底 ) max(number1, number2)

返回 number1 和 number2 中较大的数 min(number1, number2)

返回 number1 和 number2 中较小的数 pow(base, exponent) 返回底数的指数次方 random()

在0和1之间返回一个假随机数。 round(number)

Returns the value of number rounded to the nearest integer sin(number) 返回number的正弦 sqrt(number)

返回number的平方根 tan(number) 返回number的正切 5.4SFColor 对象

MFNode 对象对应于 VRML 2.0 MFNode 域。它被用来存储 SFNode 对象的一个一维数组。数组中的单个单元能使用标准的 C 语法对其操作 ( 例如 mfInt32ObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数 )。所有的单元的初始默认值为 NULL。

创建方法

mfNodeObjectName = new MFNode([SFNode, SFNode, ...]) 方法能以 0 个或 0 以上的 SFNode 值初始化数组单元。 属性 length

数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数. 方法 无

5.15MFRotation 对象

MFRotation 对象对应于 VRML 2.0 MFRotation 域。用来存储 SFRotation 对象的一个一维数组。数组的单个的单元能使用标准的 C 风格操作符来引用 ( 例如 mfRotationObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数。所有的单元的初始默认值为 SFRotation ( 0 , 0 , 1 , 0 ) 。

创建方法

mfRotationObjectName = new MFRotation([SFRotation, SFRotation, ...]) 此创建方法可用0个或多个SFRotation值对数组进行初始化。 属性 length

数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数. 方法 无

5.16MFString Object

对象 MFString 对象对应于 VRML 2.0 MFString 域。用来存储字符串对象的一个一维数组。数组的单个的单元能使用标准的 C 风格操作符来引用 ( 例如 mfStringObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数。所有的单元的初始默认值为空字符串

创建方法

mfStringObjectName = new MFString[string, string, ...]) 此创建方法可用0个或多个SFString值对数组进行初始化。 属性 length

数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数. 方法 无

5.17MFVec2f 对象

MFVec2f 对象对应于 VRML 2.0 MFVec2f 域。用来存储 SFVec2f 对象的一个一维数组。数组的单个的单元能使用标准的 C 风格操作符来引用 ( 例如 mfVec2fObjectName [ 索引 ], 在此索引值是大于等于0,小

于数组长度的整数。所有的单元的初始默认值为 SFVec2f ( 0 , 0 ) 。

创建方法

mfVec2fObjectName = new MFVec2f([SFVec2f, SFVec2f, ...]) 此创建方法可用0个或多个SFVec2f值对数组进行初始化。 属性 length

数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数. 方法 无

5.18MFVec3f 对象

MFVec3f 对象对应于 VRML 2.0 MFVec3f 域。它是被用来存储 SFVec3f 对象的一个一维数组。数组的单个的单元能使用标准的 C 风格操作符来引用 ( 例如 mfVec3fObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数。所有的单元的初始默认值为 SFVec3f ( 0 , 0 , 0 ) 。

创建方法

mfVec3fObjectName = new MFVec3f([SFVec3f, SFVec3f, ...]) 此创建方法可用0个或多个SFVec3f值对数组进行初始化。 属性 length

数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数. 方法 无

5.19VrmlMatrix 对象

VrmlMatrix 对象在 4x4 矩阵上施行操作提供了许多有效的方法。矩阵的每个元素可使用 C 风格的数组形式访问( 即, vrmlMatrixObjectName [ 0 ][ 1 ] 是在 0 行, 1 列的元素) 。

创建方法

vrmlMatrixObjectName = new VrmlMatrix(f11, f12, f13, f14, f21, f22, f23, f24, f31, f32, f33, f34, f41, f42, f43, f44)

产生一个新的矩阵,通过f11 到 f44对矩阵初始化。 vrmlMatrixObjectName = new VrmlMatrix() 产生一个新的同一矩阵 属性 无 方法

setTransform(translation, rotation, scaleFactor, scaleOrientation, center)

设置 VrmlMatrix 值。translation 是一个 SFVec3f 对象, rotation 是一个 SFRotation 对象, scaleFactor 是一个 SFVec3f 对象, scaleOrientation 是一个 SFRotation 对象,center 是一 SFVec3f 对象。任何最右边的参数可以被省略。换句话说, 方法可以取 0 ~ 5 个参数。例如, 你能指定0个参数 ( 一个单位矩阵 ), 1个参数 ( 一个 translation ), 2个参数 ( 一个 translation 和 rotation ), 3个参数 ( 一个 translation, rotation 和一个 scaleFactor) 。

getTransform(translation, rotation, scaleFactor)

分解 VrmlMatrix 并且返回对象的 translation, rotation, 和 scaleFactor 部件。参数的类型与在 setTransform 一样。矩阵的其他信息被忽略。 inverse()

返回值是对象逆矩阵的 VrmlMatrix 。 transpose()

返回值是对象转制矩阵的 VrmlMatrix 。 multLeft()

返回值是对象矩阵左乘积的 VrmlMatrix 。 multRight(matrix)

返回值是对象矩阵右乘积的 VrmlMatrix 。 multVecMatrix(vec)

返回值是行矢量乘积的 SFVec3f 。 multMatrixVec(vec)

返回值是列矢量乘积的 SFVec3f 。


VRMLScript教程.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:消防安全类题库100题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: