Bs Contact 文本"USE_TEXTURE"模式测试

Bs Contact V7.1在字体支持方面有个小小更新,就是在文本节点增加了”USE_TEXTURE “模式,这个可以改善增加Utf-8字符的范围,也就是说对对中文的支持好看了一些哦.

Ps:86vr.com算是没落了,全是木马,无语,挺好一个站,被收购者给糟蹋了.唉.

注意,字符串一定要用Utf8编码,否则会让Bs Contact崩溃,出现下面的框框.

这是ASCII转Utf8工具
点击下载此文件

#VRML V2.0 utf8

Background {
    skyColor [ .1875 .5078 .9843, .1875 .5078 .9843, .9414 .9 .9 ]
    skyAngle [ .2, 1.571 ]
    groundColor [ 0 0 0, .9414 .9 .9 ]
    groundAngle [ 1.571 ]
}

Transform {
    translation    0 0 0
    children Shape {
        appearance Appearance {
            material Material {
                diffuseColor 0 0 1
                emissiveColor 0 0 1
            }
        }
        geometry  Text {
            string "欢迎光临小可博客!(默认)"
            fontStyle FontStyle    {
                
                family [ "STHeiti" "Arial" "SANS" ]
                style "PLAIN"
                justify    "MIDDLE"
            }
        }
        
    }
}

Transform {
    translation    0 1 0
    children Shape {
        appearance Appearance {
            material Material {
                diffuseColor 0 0 1
                emissiveColor 0 0 1
            }
        }
        geometry  Text {
            string "欢迎光临小可博客!(轮廓线)"
            fontStyle FontStyle    {
                
                family [ "STHeiti" "Arial" "SANS" ]
                style "OUTLINE"
                justify    "MIDDLE"
            }
        }
        
    }
}

Transform {
    translation    0 2 0
    children Shape {
        appearance Appearance {
            material Material {
                diffuseColor 0 0 1
                emissiveColor 0 0 1
            }
        }
        geometry  Text {
            string "欢迎光临小可博客!(粗体纹理)"
            fontStyle FontStyle    {
                
                family [ "STHeiti" "Arial" "SANS" ]
                style "BOLD USE_TEXTURE"
                justify    "MIDDLE"
            }
        }
        
    }
}

Transform {
    translation    0 3 0
    children Shape {
        appearance Appearance {
            material Material {
                diffuseColor 0 0 1
                emissiveColor 0 0 1
            }
        }
        geometry  Text {
            string "欢迎光临小可博客!(斜体纹理)"
            fontStyle FontStyle    {
                
                family [ "STHeiti" "Arial" "SANS" ]
                style "ITALIC USE_TEXTURE"
                justify    "MIDDLE"
            }
        }
        
    }
}

Transform {
    translation    0 4 0
    children Shape {
        appearance Appearance {
            material Material {
                diffuseColor 0 0 1
                emissiveColor 0 0 1
            }
        }
        geometry Text {
            string "欢迎光临小可博客!(默认纹理)"
            fontStyle FontStyle    {
                
                family [ "STHeiti" "Arial" "SANS" ]
                style "PLAIN USE_TEXTURE"
                justify    "MIDDLE"
                language "zh"
            }
        }
        
    }
}

国际禁毒日-依法禁毒、构造和谐

今天是国际禁毒日,身为禁毒志愿者,提倡大家共同宣传禁毒知识,共同抵制毒品!      

每年的6月26日是联合国确定的国际禁毒日(International Day Against Drug Abuse and Illicit Trafficking)

全球每年20万人因毒而亡

毒品不但影响着成年人,孩子们也正受其侵蚀.2008年3月3日,在阿根廷首都布宜诺斯艾利斯以北310公里的罗萨里奥,16岁的巴勃罗拿着一根掺有名为”paco”的烟.”paco”是一种混合有可卡因和其他有毒物质的毒品.

200世纪80年代,面对毒品在全球日趋泛滥、毒品走私日益严重这一严峻形势,联合国1987年6月在奥地利维也纳召开了关于麻醉品滥用和非法贩运问题的部长级会议.会议提出”爱生命、不吸毒”的口号,并建议将每年的6月26日定为”国际禁毒日”.同年12月,第42届联合国大会通过决议,正式将每年6月26日确定为”国际禁毒日”.

据统计,全球每年因滥用毒品致死的人数高达20万,上千万人因吸毒丧失劳动能力,吸毒人群日益年轻化.

据联合国《2007年度世界毒品报告》提供的数据,2006年全球鸦片总产量达6610吨,创历史最高纪录,比2005年增加43%.其中,阿富汗鸦片产量为6100吨,比2005年增长2000吨.其主要原因是阿富汗的罂粟种植面积从2005年的10.4万公顷增至2006年的16.5万公顷.

用PHP动态生成虚拟现实VRML网页

多年前本人开始从事三维动画方面的学习,后学习了PHP,发现可以通过PHP动态生成VRML文档,有点类似于Generator动态生成Flash的方式。
由于VRML博大精深,这里只介绍一个简单的例子,还可以将各种VRML结点存入数据库中,这样的虚拟现实网页将……,爽!
下面是源程序。注意:在服务器上,要将让PHP处理wrl格式的文档,否则后果将是没有任何虚拟现实。本源程序直接存成wrl文件

<?php header(“Content-type: application/x-vrml”);$txt=”#VRML V2.0 utf8

DEF leftBox Transform
{
translation -5 0 0
children
[
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 1 0 0
}
}
geometry Box{}
}
DEF SphereChild Shape
{
appearance Appearance
{
material Material
{
diffuseColor 1 0 1
}
}
geometry Sphere
{
radius 1.2
}
}
]
}

DEF rightBox Transform
{
translation 5 0 0
children
[
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 0 0 1
}
}
geometry Box{}
}
]
}

DEF onoff Transform
{
translation 0 -1 0
children
[
Shape
{
appearance Appearance
{
material Material
{
diffuseColor 0 1 0
}
}
geometry Box{}
}
DEF TS TouchSensor{}
]
}

DEF S Script
{
eventIn SFBool isActive
eventOut MFNode child
field MFNode testNode USE SphereChild
url
“javascript:
function isActive(value)
{
if (value)
{
child=testNode;
}
}

}

ROUTE TS.isActive TO S.isActive
ROUTE S.child TO leftBox.removeChildren
ROUTE S.child TO rightBox.addChildren”;echo $txt;
?>

利用JavaScript在VRML与HTML之间通信

最近常有人问JavaScript的问题,好吧,我们来看看JavaScript的实现方法吧。

这是以前VBScript中的一个例子,现在我们用JavaScript来做。
在html中比较关键的代码如下:
script language=”Javascript”
!–
function M_o(){
M_e=Scene.Engine;
M_e.Nodes(“my_Time”).Fields(“enabled”)=1;
M_x.value=M_e.Nodes(“my_view”).Fields(“translation”).x;
M_y.value=M_e.Nodes(“my_view”).Fields(“translation”).y;
M_z.value=M_e.Nodes(“my_view”).Fields(“translation”).z;
}
function M_c(){
M_e=Scene.Engine;
//新建对象M_e,它所指向的正是VRML场景Scene.
M_e.Nodes(“my_Time”).Fields(“enabled”)=0;
//将VRML场景中的”my_Time”节点的”enabled”值设为FALSE
M_x.value=M_e.Nodes(“my_view”).Fields(“translation”).x;
M_y.value=M_e.Nodes(“my_view”).Fields(“translation”).y;
M_z.value=M_e.Nodes(“my_view”).Fields(“translation”).z;
//将VRML场景中的”my_view”的x,y,z坐标值分别反馈到html页中的三个文本框中.
}
!–
/script
其中定义了两个过程M_o()和M_c(),来分别响应HTML页中按钮的点击.

以及
OBJECT id=”Scene”
CLASSID=”CLSID:86A88967-7A20-11d2-8EDA-00600818EDB1″
WIDTH=”300″
HEIGHT=”300″
PARAM NAME=”Scene” value=”kk.wrl”
/OBJECT
注意id=”Scene”不要丢了,这是给这个VRML场景取的名字.当然你也可以取成其它的名字,不过要与VBScript中的保持一致.

附录1,html代码:
html
head
script language=”Javascript”
!–
function M_o(){
M_e=Scene.Engine;
M_e.Nodes(“my_Time”).Fields(“enabled”)=1;
M_x.value=M_e.Nodes(“my_view”).Fields(“translation”).x;
M_y.value=M_e.Nodes(“my_view”).Fields(“translation”).y;
M_z.value=M_e.Nodes(“my_view”).Fields(“translation”).z;
}
function M_c(){
M_e=Scene.Engine;
M_e.Nodes(“my_Time”).Fields(“enabled”)=0;
M_x.value=M_e.Nodes(“my_view”).Fields(“translation”).x;
M_y.value=M_e.Nodes(“my_view”).Fields(“translation”).y;
M_z.value=M_e.Nodes(“my_view”).Fields(“translation”).z;
}
!–
/script
/head
body
OBJECT id=”Scene”
CLASSID=”CLSID:86A88967-7A20-11d2-8EDA-00600818EDB1″
WIDTH=”300″
HEIGHT=”300″
PARAM NAME=”Scene” value=”kk.wrl”
/OBJECT
input type=button value=”RUN” onClick=”M_o()”
input type=button value=”STOP” onClick=”M_c()”
x:y:z:/body
/html
附录2,VRML代码:
#VRML V2.0 utf8

DEF my_view Transform{
translation 1 1.2 16
rotation 0 1 0 -1
children [
DEF my_viewpoint Viewpoint {
description “AutoRun”
orientation 1 0 0 0
position 0 0 0
}
]
}
DEF old_Viewpoint Viewpoint {
description “Entry point”
orientation 0 1 0 -1
position 1 1.2 16
}
DirectionalLight {
ambientIntensity 0.8
intensity 0.6
direction 0 -1 0
}
Shape {
appearance Appearance {
material Material {
diffuseColor 1 0 0
}
}
geometry ElevationGrid {
xDimension 4
xSpacing 5.5
zDimension 4
zSpacing 5.5
height [0.8 0.1 0.4 0.5
0.5 0.4 0 0.4
0.2 0.1 0.4 0.3
0.5 0.6 0.7 0.2]
}
}
Transform {
translation 8 3.5 8
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0 0 1
}
}
geometry Box {size 1 1 1 }
}
]
}
Transform {
translation 15 0.6 15
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0 1 0
}
}
geometry Cylinder {
height 1.2
radius 0.4
}
}
]
}

DEF my_Time TimeSensor {
cycleInterval 20
enabled FALSE
loop TRUE
}
DEF my_Position PositionInterpolator {
key [0 0.25 0.38 0.5 0.75 1.0]
keyValue [1 1.2 16,2 1.2 1,7 1.2 1,
15 1.2 1,14 1.2 12,1 1.2 16]
}
DEF my_Direction orientationInterpolator {
key[0 0.25 0.38 0.5 0.75 1.0]
keyValue [0 1 0 -1,0 1 0 -2.9,0 1 0 3.14,
0 1 0 2.9,0 1 0 1.4,0 1 0 -1]
}
DEF my_LookUpAngle orientationInterpolator {
key [ 0 0.25 0.38 0.5 0.75 1.0]
keyValue [1 0 0 0,1 0 0 0,1 0 0 0.3,
1 0 0 0,1 0 0 0,1 0 0 0]
}
ROUTE my_viewpoint.bindTime TO my_Time.set_startTime
ROUTE my_viewpoint.isBound TO my_Time.set_enabled

ROUTE my_Time.fraction_changed TO my_Position.set_fraction
ROUTE my_Time.fraction_changed TO my_Direction.set_fraction
ROUTE my_Time.fraction_changed TO my_LookUpAngle.set_fraction

ROUTE my_Position.value_changed TO my_view.set_translation
ROUTE my_Direction.value_changed TO my_view.set_rotation
ROUTE my_LookUpAngle.value_changed TO my_viewpoint.set_orientation

*因显示问题,将HTML语言的<和>全部除去

VRML交互程序编程

利用Interpolator内插器节点和TimeSensor时间传感器节点,再加上ROUTE语句,人们可以编写出VRML动画程序。利用其它传感器Sensor节点,人们可以编写出VRML交互程序。下面我们对这些节点一一介绍:

一. CylinderSensor节点

作用: 可使鼠标的移动转变成形体的绕自身Y轴的旋转运动。

通过坐标变换,可使形体绕任意轴旋转。

可以用鼠标拖动一个形体,来使自身旋转。

也可以用鼠标拖动一个形体,来使另一个形体旋转

主要字段: maxAngle 可用来控制最大旋转角度

minAngle 可用来控制最小旋转角度

rotation_changed 向外发出的旋转信号

编程步骤1: 利用Transform构造一个坐标系,里面放置两个内容:
一个形体和一个CylinderSensor,它们放置在一个方扩弧里面。

用DEF对Transform和CylinderSensor命名,
假设Transform的名字为NAMETT,CylinderSensor的名字为NAMECC。

编程步骤2: 通过编写一个ROUTE语句,使鼠标的移动变成形体的转动。

编写的ROUTE语句为:ROUTE NAMECC.rotation TO NAMETT.rotation
(也可以写成:ROUTE NAMECC.rotation_changed TO NAMETT.set_rotation)

点击这里可运行书中P66页的EX7_01.WRL(黄色立方体可用鼠标拖动旋转)
点击这里可阅读书中P66页的EX7_01.WRL(黄色立方体可用鼠标拖动旋转)

点击这里可运行书中P67页的EX7_02.WRL(用鼠标拖动右下角的形体,可使桌子旋转)

点击这里可阅读书中P67页的EX7_02.WRL(用鼠标拖动右下角的形体,可使桌子旋转)

二. PlaneSensor节点

作用: 可使鼠标的移动转变成形体沿自身Z=0的平面的移动。

通过坐标变换,可使形体绕任意轴旋转。

可以用鼠标(按住鼠标左键)拖动一个形体,来使自身移动。

也可以用鼠标(按住鼠标左键)拖动一个形体,来使另一个形体移动

主要字段: maxPosition 可用来控制最大移动位置
minPosition 可用来控制最小移动位置
translation_changed 向外发出的移动信号

编程步骤: 与CylinderSensor相同

点击这里可运行书中P69页的EX7_03.WRL(红色圆锥可用鼠标拉着在板上移动)

点击这里可阅读书中P69页的EX7_03.WRL(红色圆锥可用鼠标拉着在板上移动)

点击这里可运行书中P70页的EX7_04.WRL(拖动板上的两个小形体,可带动板上的大形体)

点击这里可阅读书中P70页的EX7_04.WRL(拖动板上的两个小形体,可带动板上的大形体)

三. SphereSensor节点

作用: 可使鼠标的移动转变成形体绕自身原点的转动

可以用鼠标(按住鼠标左键)拖动一个形体,来使自身转动

也可以用鼠标(按住鼠标左键)拖动一个形体,来使另一个形体转动

主要字段: rotation_changed 向外发出的移动信号

编程步骤: 与CylinderSensor相同

点击这里可运行书中P74页的EX7_06.WRL(用鼠标转动球,可使小丑联动)

点击这里可阅读书中P74页的EX7_06.WRL(用鼠标转动球,可使小丑联动)

四. ProximitySensor节点

作用: 可以检测到观察点接近的信号,利用它可控制其它操作,如发出声音,让形体运动、让形体颜色变化等

主要字段: size 用来设定可探测范围,其中心在局部坐标系的原点

enterTime 发出接近信号

exitTime 发出退出信号

编程步骤1: 在一个局部坐标系中,给出一个用DEF命名的ProximitySensor和一个形体

编程步骤2: 通过一个ROUTE语句,将ProximitySensor的探测信号传给一个时间传感器或传给一个Javascript程序,使程序发生相应的变化,如动画、发出声音、改变颜色等。

假设一个ProximitySensor的名字为PPP,一个时间传感器TimeSensor的名字为TTT,则这个ROUTE语句可写成下面的形式,从而启动一个动画效果:

ROUTE PPP.enterTime TO TTT.startTime

点击这里可运行书中P72页的EX7_05.WRL(走进大门,门将打开,远离大门,门将关闭)

点击这里可阅读书中P72页的EX7_05.WRL(走进大门,门将打开,远离大门,门将关闭)

五. TouchSensor节点

作用: 可接收鼠标点击形体的动作,并使程序发生相应变化,如动画、发出声音、改变颜色

主要字段: isOver 当鼠标移到形体上方时,形体发出的逻辑信号

touchTime 当鼠标点击形体时,形体发出的时间信号

编程步骤1: 在一个局部坐标系中,给出一个形体及用DEF命名的TouchSensor

程序运行时,当鼠标移到形体上时,TouchSensor准备接受点击信号,同时发出isOver信号

编程步骤2: 利用isOver或touchTime信号,使程序发生相应变化,如动画、发出声音、改变颜色

下面是一个利用TouchSensor的最简单的程序:
#VRML V2.0 utf8

DEF TRAN Transform {
children [
Shape {
appearance Appearance {material Material {diffuseColor 1 0 0}}
geometry Box {}
}
DEF TTT TouchSensor {}
]
}

DEF TS TimeSensor {
cycleInterval 10
}
DEF pi PositionInterpolator{
key [0 0.5 1]
keyValue [0 0 0 , 0 5 0, 0 0 0]
}
ROUTE TTT.touchTime TO TS.startTime
ROUTE TS.fraction_changed TO pi.set_fraction
ROUTE pi.value_changed TO TRAN.translation

Background {skyColor 1 1 1}

VRML多媒体编程及自定义节点的应用

一. VRML多媒体编程

1. 形体生成

方法1: 利用VRML的基本形体节点

方法2: 利用VRML的复杂形体节点

方法3: 利用Inline节点调用另外一个VRML文件

方法4: 利用其它三维绘图工具(如3D MAX、RHINO)生成并输出成VRML文件

2. 灯光的生成

在一个局部坐标系中设置光源,根据具体的光源,给出光照半径、角度、方向

使用的节点有:

PointLight,主要参数有:radius、color
DirectionalLight,主要参数有:direction、color

SpotLight,主要参数有:radius、direction、beamWidth、cutOfAngle

3. 文字的生成

使用的节点有:

Text,主要参数有:string、fontStyle
FontStyle,主要参数有:size、justify、horizontal

4. 图片处理
目的:在形体上贴图。
使用的节点有:

ImageTexture,主要参数有:url
TextureCoordinate,主要参数有:point

TextureTransform,主要参数有:rotation、scale、translation

5. 像素图的生成

使用的节点有

PixelTexture,主要参数有:image
TextureCoordinate,主要参数有:point

TextureTransform,主要参数有:rotation、scale、translation

6. 影像的应用
使用的节点有

MovieTexture,主要参数有:url
7. 声音的生成
使用的节点有

Sound,主要参数有:location、maxBack、minBack、maxFront、minFront、source
AudioClip,主要参数有:url

二. VRML自定义节点的应用
1. PROTO使用步骤
作用:在程序中给出一个自定义节点。
假设的一个问题,想定义一个板凳节点BENCH,如何编程?

步骤1:

写出一段程序,放在程序的第一行之后,注意,有一对方扩弧和一对花扩弧

PROTO BENCH [ ] { }
步骤2:
在方扩弧里面给出编程时可能要改变的参数内容,如想改变板凳腿颜色和板凳腿的尺寸,则在方扩弧里面给出下面的内容:

[ field SFColor legcolor 1 0 0
field SFVec3f legsize 0.4 1.2 1
]

步骤3:

在花扩弧里面给出用几个Transform节点语句定义的板凳内容,颜色用IS语句替代

{
Transform{ … }
}
步骤4:
在程序中用BENCH节点定义所需要的板凳内容,例如下面定义了两个板凳,一个用缺省参数,一个改变了板凳腿的颜色:

Transform{
translation -5 0 0
children BENCH {}
}
Transform{
translation 5 0 0
children BENCH {legcolor 0 0 1}
}
2. EXTERNPROTO使用步骤
作用:使用自己或他人定义的PROTO节点
步骤1:

了解所使用的自定义节点的具体内容

步骤2:

在调用程序中给出一个EXTERNPROTO语句,它由三个部分组成:名称、一对方扩弧、一对双引号。方扩弧里面给出被调用的PROTO语句的内容,但要去掉初始值;双引号中给出被调用文件的位置,它可以在电脑上,也可以在网络中。例如:

EXTERNPROTO BENCH [… ]

VRML2.0十四个关键字

VRML2.0有十四个关键字,它们不能作为自定义的域名,节点名和对象名。
(1)DEF:给后续的节点命名,这个名字就是节点名,典型格式为:
DEF 节点名 节点
(2)USE: 引用DEF定义的节点名,典型格式为:
USE 节点名
(3)TRUE:表示“真”,“1”,“是”等,用于给SFBool域赋值。
(4)FALSE:表示“假”,“0”,“否”等,用于给SFBool域赋值。
(5)NULL:表示空值,用于给SFNode域赋空值。
(6)PROTO:用于声明自定义节点的原型,典型格式为:
PROTO 节点名称 [
域的自定义(包括其缺省值)
事件的自定义
]{
执行体
}
(7)EXTERNPROTO:用于预解释引用的外部定义节点的原型,典型格式为:
EXTERNPROTO 节点名称 {
域的自定义(不包括其缺省值)
事件的自定义
]
外部节点的资源定位。
其中域、事件的类型和名称必须与引用的外部节点中的定义一样。外部节点的资源定位格式为:
“URL/URN”或[“URL/URN”,”URL/URN”,···]。
资源定位可以为URL或URN格式,当使用”URL/URN”或[“URL/URN”,”URL/URN”,···]的数组形式时,浏览器使用数组中第一个正确寻获的资源。资源的形式也可以写为:
URL/URN # externProtytypeName
externProtytypeName为引用的外部节点的名称,这时候,可以使用与外部节点定义的名称不同的节点名称。
(8)ROUTE:构成事件通路。典型格式为:
ROUTE fromNode.fromEvent TO toNode.toEvent
fromNode 为发出事件的节点的名称。
fromEvent 为事件输出的名称。
toNode 为接受事件的节点的名称。
toEvent 为事件输入的名称。
(9)TO:见ROUTE的说明。
(10)eventIn:定义事件输入,典型格式为:
eventIn 数值类型 事件名。
(11)eventOut:定义事件输出,典型格式为:
eventOut 数值类型 事件名。
(12)field:定义私有域,典型格式为:
field 数值类型 域名 缺省值。
(13)exposedField:定义公共域,典型格式为:
exposedField 数值类型 域名 缺省值。
(14)IS:用于原型声明中,把自定义的域和事件与执行体中节点的域和事件等同起来。典型格式为:
执行体中节点的域或事件 IS 自定义的域或事件

VRML域的说明

有两类常见的域,一类只包含单值(所谓单值,可以是一个单独的数,也可以是定义一个向量或颜色的几个数,甚至可以是定义一幅图像的一组数)另外一类包含多个单值。单值类型的域,名称以“SF”开始;多值类型的域,名称以“MF”开始。
在VRML文件中,表示多值域的方法是:一系列用逗号和空格间隔开的单值,整个用方括号括起来。如果一个多值域,不包含任何值,则只标出方括号(“[]”),其中不填任何数。如果一个多值域,恰好只包含一个数,可以不写括号,直接写该值。例如,可以表示一个多值域,其中只包含一个单独的整数1,下列两种方式均属有效:

      [1]
本说明依次介绍两种域的值。单值类型的域按英文字母的顺序给出;多值域按相应的单值域配合列出。事件的类型与域的类型是完全一致的。每一个事件类型都具有一个相关的初始值,在类型描述中有所规定。当脚本试图读取一个尚未发送的输出事件的数值时,该初始值被返回。
SFBool
一个SFBool域只含有一个Bool值。TRUE和FALSE(不带引号也不带任何标点符号)是SFBool域仅有的两个有效值。
SFBool输出事件的初始值是FALSE。
注意:一般的程序设计重用1和0表示True和False值,在VRML中不允许。

SFColor和MFColor
SFColor域是只有一个颜色值的单值域。SFColor值和RGB值一样,由一组三个浮点数组成。每个数都是从0.0–1.0,极值包括在内,分别表示构成颜色的红绿蓝三个分量。
MFColor域是一个多值域,包含任意数量的RGB颜色值。例如:
[ 1.0 0.0 0.0,0 1 0,0 0 1]
表示三种颜色红绿蓝的组成。
SFColor域的输出事件的初始值是(0,0,0)。而MFColor域的输出事件的初始值是[]。

SFFloat和MFFloat
一个SFFloat域含有一个ANSI C格式的单精度浮点数。
一个MFFloat域含有零个或多个ANSI C格式的单精度浮点数。即允许空白,不赋任何值。
SFFloat域输出事件的初始值为0.0。MFFloat域输出事件的初始值为[]。

SFImage
一个SFImage域含有非压缩的二维彩色图像或灰度图像。
一个SFImage域,首先列出三个整数值,前两个表示图片的宽度和高度,第三个整数表示构成图像格式的元素个数(1–4),随后,按(宽度x高度)的格式列出一组16进制数,数与数之间以空格分隔,每一个16进制数表示图像中一个单独的像素。
图像格式的元素个数表示这张图像是灰度图还是彩色图,以及是否包括透明像素或半透明像素。
单元素图像中的每一个像素用一个16进制的字节表示,所表示的是一个像素的亮度。例如:0XFF表示最高亮度(白色),而0X00表示最低亮度(黑色)。
双元素图像用两个字节表示一个像素。第一个字节表示亮度,第二个字节表示透明度。表示透明度时,字节为0xFF表示完全透明,而0x00表示不透明。所以0x40C0表示1/4亮度(暗灰)和3/4透明度。
三元素图像的每个像素有三个字节表示,每个字节表示像素颜色中红绿蓝分量(所以0xFF0000表示红色)。
四元素图像是在红绿蓝三色的值之外再加一个表示透明度的字节(所以0x0000FF80表示办透明的蓝色)。和双元素图像一样,透明度字节为0xFF表示完全透明,而0x00表示完全不透明。
为了提高可读性,最好把所有的16进制字节都写全,包括前导0。然而,写出每个字节有时是不必要的。例如可以把一个三元素图像的蓝色像速写成0xFF而不是0x0000FF。
像素的排列规定从左到右、从底到顶的顺序。第一个16进制数描述一个图像最左下角的像素,最后一个则描述右上角的像素。
例:1 2 1 0XFF 0X00
一个像素宽,两个像素高的灰度图像,底部像素是白的,顶部像素是黑的。
2 4 3 0XFF0000 0X00FF00 0 0 0 0 0XFFFFFF 0XFFFF00
两个像素宽,四个像素高的RBG图像,左下角像素是红色,右下角像素是绿色,中间两行是黑色,左上角像素是白色,右上角像素是黄色。
在任何脚本节点或原型内都可以使用这种类型的域,但是,使用的具体地点只能在PiexlTexture(像素纹理)节点。
SFImage域的输出事件的初始值为(0,0,0)。

SFInt32和MFInt32
一个SFInt32域含有一个32位整数。一个SFInt32值是由一个十进制或十六进制(以OX开头)格式的整数构成。
一个 MFInt32域是多值域,由任意数量的以逗号或空格分隔的整数组成。例如:
[17,-0xE20,-518820]
SFInt32域的输出事件的初始值为0,MFInt32域的输出事件的初始值为[]。

SFNode和MFNode
一个SFNode域含有一个单节点,必须按标准节点句法写成。
一个MFNode域包含任意数量的节点。例:
[Transform{translation 1 0 0},
DEF PANDORA box{},
USE PANDORA]
一个SFNode允许包含一个关键字NULL,此时,表示它不包含任何节点。
注意:一个组或一个变换的children域也就是列出一组节点的MFNode域。
把SFNode域放入一个脚本节点,就使节点的脚本可以直接存取列在SFNode域的节点,而不需要一个ROUTE语句。
SFNode域的输出事件的初始值为NULL,MFNode域的输出事件的初始值为[]。

SFRotation和MFRotation
SFRotation域规定一个绕任意轴的任意角度的旋转。SFRotation值含有四个浮点数,各数之间以空格分隔。前三个数表示旋转轴(从原点到给定点的向量);第四个数表示围绕上述轴旋转多少弧度。例:绕y轴旋转180o表示为
0 1 0 3.1416
MFRotation域可包含任意数量的这类旋转值。
注意:视点的旋转是从缺省的视点方向开始的,该方向是从(0,0,10)沿-z轴观察。
SFRotation域的输出事件的初始值为(0 0 1 0),MFRotation域的输出事件的初始值为[]。

SFString和MFString
SFString域包含一串字符,各字符遵照UTF-8字符编码标准(ASCII是UTF-8的子集,可以由于SFString域)SFString值含有双引号括起来的UTF-8 octets字符串。任何字符(包括“#”和换行符)都可在双引号中出现。
为了在字符中使用双引号,在它之前加一个反斜杠“\”。为了在字符串中使用反斜杠,连续打两个反斜杠“\\”。例如:
“One,Two,Three,123.”
He asked, \”Who is #1?\””
MFString域含有零个或多个单值,每个单值都和SFString值的格式一样。
SFString域的输出事件的初始值为“”,MFString域的输出事件的初始值为[]。

SFTime和MFTime
SFTime域含有一个单独的时间值。每个时间值是一个ANSI C格式的双精度浮点数,表示的是从1970年1月1日(GMT,格林威治平均时)子夜开始计时,延续当前时间的秒数。
MFTime域包含任意数量的时间值。
SFTime域的输出事件的初始值为-1,MFTime域的输出事件的初始值为[]。

SFVec2f和MFVec2f
SFVec2f域定义了一个二维向量。SFVec2f的值是两个由空格分隔的浮点数。
MFVec2f域是多值域,包含任意数量的二维向量值。例如:
[0 0,1.2 3.4,98.6 -4e1]
SFVec2f域的输出事件的初始值为(0 0),MFVec2f域的输出事件的初始值为[]。

SFVec3f和MFVec3f
SFVec3f域定义了一个三维空间的向量。一个SFVec3f值包含三个浮点数,数与数之间以空格分隔。该值表示从原点到所给定点的向量。
MFVec3f域包含任意数量的三维向量值。例如:
[0 0 0,1.2 3.4 5.6,98.6 -461 451]
SFVec3f域的输出事件的初始值为(0 0 0),MFVec3f域的输出事件的初始值为[]。