📄 vrml第十二章到第二十二章.txt
字号:
第十二章 内联VRML文件
将一个较大的VRML场景分为几个部分,分别用一个相应的VRML文件创建,然后用Inline节点将这些VRML文件集合到一个VRML文件中。
约束框架就是一个正好将相应的空间造型包围在里面的正方体,当然这个正方体并不是实际创建的空间正方体。浏览器在判断一个造型是否可见时只要简单地判断这个空间造型的约束框架是否可见即可。
使用Inline节点内联其他的VRML文件时同样采用了约束框架的方法来加快VRML文件的浏览速度,在这里成为内联框架。Inline节点支持多层嵌套。
另外对于内联的各个VRML文件其实是相互独立的一些VRML文件,其中用DEF所定义的节点名称也只在其定义的VRML文件中被USE所使用。
Inline节点语法
Inline {
url [] #域值类型 MFString
bboxCenter -1.0 -1.0 -1.0 #域值类型 SFVec3f
bboxSize 0.0 0.0 0.0 #域值类型 SFVec3f
}
url指定一个VRML文件的Url地址列表,按照优先级从高到低依次向后排列。在搜寻和载入指定的VRML文件时Inline节点就以内联框架显示在浏览窗口中,而后将以引入的VRML文件创建的空间造型来代替。如果在这些给定的地址中没有找到一个VRML文件引入,那么内联框架将一直显示。url域的域值可以通过输入接口set_url进行重新设置,新的url域的域值将通过输出接口url_changed传递出去。
bboxCenter指定这个Inline节点内联框架的空间位置,即指定了引入的VRML文件所创建的空间造型的空间位置。这个值是一个空间点的位置,也就是内联框架中心位置。(可以使用事件接口)
bboxSize指定这个Inline节点内联框架的大小,第1个值是内联框架在当前坐标系下X轴方向上的长度;第2个值和第3个值分别指定了内联框架在Y轴和Z轴方向上的长度。默认值代表浏览器自己计算这个Inline节点的内联框架的大小。(可以使用事件接口)
在VRML文件中Inline节点可以作为任何编组节点的子节点出现。
[简单的虚拟城市街道十字路口.wrl]
第十三章 光照效果
在VRML中光源按照其发射光线的方向可以分为点光源、平行光源和聚光光源3种。在浏览VRML文件时不能观察到一个光源的存在而只能观察到这个光源所产生的光照效果而已。在VRML中并不支持在光源照射下的空间造型自动的产生阴影效果,而是在VRML虚拟空间中的光线将直接穿过任何空间造型而不能形成阴影的效果。为了解决这个问题:是在应该出现阴影的地方生成适当大小的、黑色半透明的面来模拟阴影的存在。
在VRML中可以规定点光源和聚光光源的光照范围,光源将照亮给定光照范围内的空间造型,而在一个光源光照范围之外的空间造型将不受到这个光源的任何影响。对于平行光源而言,无法规定一个有限大小的光照范围,所以通常的做法是通过Transform节点来给定一个平行平行光源的光照范围,即当一个平行光源作为某一个特定的 Transform节点的子节点时,这个平行光源只能照亮到这个Transform节点中所创建的空间造型,而这个Transform节点之外的空间造型没有任何的光照影响,同样这种方法也适用于点光源和聚光光源。
1、光源节点
PointLight节点(点光源)、DirectionalLight节点(平行光源)和SpotLight节点(聚光光源)。
1.PointLight节点语法
PointLight {
location 0.0 0.0 0.0 #域值类型 SFVec3f
radius 100.0 #域值类型 SFFloat
intensity 1.0 #域值类型 SFFloat
ambientIntensity 0.0 #域值类型 SFFloat
color 1.0 1.0 1.0 #域值类型 SFColor
attenuation 1.0 0.0 0.0 #域值类型 SFVec3f
on TRUE #域值类型 SFBool
}
location指定光源的空间位置的三维坐标。(可以使用事件接口)
radius指定点光源的光照范围。是一个以location域的域值规定的光源空间位置点为中心的空间球体,在这个球体范围之内的空间造型将被这个点光源照亮。radius域值给出的是这个空间球体半径的数值,单位为VRML单位。(可以使用事件接口)
intensity指定点光源的光照亮度,1.0为光照亮度的最大值,最小值为0.0。(可以使用事件接口)
ambientIntensity指定点光源的环境照明强度系数。0.0光源对周围的环境没有任何的影响;取为1.0表明光源产生较强的环境光照效果。(可以使用事件接口)
color指定点光源的颜色。(可以使用事件接口)
attenuation指定光照范围内光线的衰减方式。缺省值表示在整个的点光源光照球体范围内的光照亮度都将保持一致,并不产生衰减现象。其中第1个数值用来控制光源在给定的照明球体中是否保持照明的亮度一致;第2个数值用来控制在照明范围内随着离开光源的距离大小光照亮度的衰减程度;第3个数值控制在照明范围内离开光源距离大小的平方和光照亮度衰减程度之间的变化。(可以使用事件接口)
on设置在VRML空间中是否打开由这个节点所创建的光源。默认打开光源。(可以使用事件接口)
DirectionalLight节点(平行光源)
DirectionalLight {
intensity 1.0 #域值类型 SFFloat
ambientIntensity 0.0 #域值类型 SFFloat
color 1.0 1.0 1.0 #域值类型 SFVec3f
direction 0.0 0.0 -1.0 #域值类型 SFVec3f
on TRUE #域值类型 SFBool
}
direction指定这个平行光源发射光线的空间方向。其给出的是一个空间点的坐标值,这个向量的方向规定为坐标原点指向给定的空间点,光源光线的方向将和这个给定的空间向量的方向相一致。默认值表示平行光源的光线将是沿着当前空间坐标系Z轴的反方向传播。(可以使用事件接口)
SpotLight节点(聚光光源)
SpotLight {
location 0.0 0.0 0.0 #域值类型 SFVec3f
direction 0.0 0.0 -1.0 #域值类型 SFVec3f
radius 100.0 #域值类型 SFFloat
intensity 1.0 #域值类型 SFFloat
ambientIntensity 0.0 #域值类型 SFFloat
color 1.0 1.0 1.0 #域值类型 SFColor
attenuation 1.0 0.0 0.0 #域值类型 SFVec3f
beamWidth 1.570796 #域值类型 SFFloat
cutOffAngle 0.785398 #域值类型 SFFloat
on TRUE #域值类型 SFBool
}
cutOffAngle用于设置这个聚光光源的聚光光锥扩散角的大小,这个扩散角就是指这个光锥的中心轴与光锥母线之间的夹角,即锥顶角的一半。单位为弧度,范围在0rad~1.570796rad之间,较大的域值所创建的光源将有一个较大的照明范围。(可以使用事件接口)
beamWidth用于设置聚光光源的散射光锥的大小,也就是给出了一个角度值,对应这个散射光锥的锥顶角。通常一个聚光光源的散射光锥小于其聚光光锥,在散射光锥范围内的光照强度保持不变,而在两个光锥之间的光照亮度将逐渐减弱,直到聚光光锥处光照减弱为零。该域值范围在0rad~3.14159rad之间。默认值表示指定的聚光光锥和散射光锥是相互重合的。(可以使用事件接口)
2、光源节点的使用
[一个点光源的光照效果01.wrl]
[一个点光源的光照效果02.wrl]
[一个点光源的光照效果03.wrl]
[一个点光源的光照效果04.wrl]
[一个点光源的光照效果05.wrl]
[平行光源光照效果01.wrl]
[平行光源光照效果02.wrl]
[平行光源光照效果03.wrl]
[聚光光源的光照效果01.wrl]
[聚光光源的光照效果02.wrl]
[平行光光源_阴影效果.wrl]
为了更好地观察由光源节点所创建的空间光源的光照效果,可以将VRML浏览器中的顶灯(headlight)关闭再进行观察。
第十四章 空间视点控制
在VRML中还提供了一类专门用来设置浏览者、浏览方式以及浏览器本身参数的节点,其中主要包括Viewpoint节点、NavigatioInfo节点、Anchor节点和WorldInfo节点等。浏览者通过Viewpoint节点可以在虚拟世界中预先设置一个空间视点,从当前的视点上快速的切换到这些视点上。
1、Viewpoint节点语法
Viewpoint {
position 0.0 0.0 1.0 #域值类型 SFVec3f
orientation 0.0 0.0 1.0 0.0 #域值类型 SFRotation
fieldOfView 0.785398 #域值类型 SFFloat
description "" #域值类型 SFString
jump TRUE #域值类型 SFBool
set_bind #输入接口 SFBool
isBound #输出接口 SFBool
bindTime #输出接口 SFTime
}
position用来指定这个Viewpoint节点所创建的空间视点的空间位置。其缺省值表示在水平面上空间原点前面一个单位的那个点上。(可以使用事件接口)
orientation指定空间视点的空间朝向,也就是浏览者在虚拟世界中所面对着的方向,但不是直接给出方向,而只是给出了一个旋转轴以及旋转的角度和方向。这是因为在VRML中已经预先规定了一个初始的空间朝向,就是当前空间坐标系Z轴的负方向。(可以使用事件接口)
fieldOfView域值将给出一个以弧度为单位的角度值,用来指定空间视点的视宽角的大小。(可以使用事件接口)
description指定一个简短的字符串,对该Viewpoint节点所创建的空间视点进行描述,其实就是这个空间视点的名称。(可以使用事件接口)
jump指定这个空间视点是否是一个跳跃性视点。(可以使用事件接口)
Viewpoint节点中的set_bind输入接口、isBound和bindTime输出接口主要用在空间视点之间相互切换的时候。当浏览者在浏览窗口中从当前的空间视点切换到另外一个空间视点时依次将有下面的事件发生,首先向当前视点Viewpoint节点的输入接口set_bind中发送FALSE,然后该Viewpoint节点的输出接口isBound和bindTime同时向外发送一个FALSE和当前空间中的绝对时间;而新的空间视点Viewpoint节点的输入接口set_bind则会接受到一个TRUE值,然后输出接口isBound和bindTime也将同时向外发送一个TRUE和当前空间中的绝对时间。这样就从当前视点切换到了新的空间视点上,而切换的方式则根据Viewpoint节点中的jump域值所规定的该节点的跳跃性来决定。
当VRML文件没有给出任何一个空间视点则浏览器将把一个使用缺省值的视点作为当前的空间视点来控制浏览器窗口中的显示,这个空间视点将位于最顶层空间坐标系中0.0 0.0 1.0点上,朝向空间坐标系Z轴反方向上,视宽角为45度。
2、空间视点控制
[空间视点控制_浏览器窗口中空间视点列表菜单.wrl]
第十五重 浏览者控制
本章介绍NavigationInfo节点则可以设置浏览者替身的大小、移动方式、移动速度、能见度以及头顶灯是否打开等参数,从而对浏览者替身进行有效的控制。
替身大小的设置包括:宽度参数、身高参数和步高参数。宽度参数决定了替身在虚拟空间中碰到一个空间造型时和这个空间造型之间的距离,这个参数在前后方向上就是替身从背部到前胸之间的距离,而在左右方向上就是替身从左肩到右肩之间的距离。不过宽度给出的是一个半径值,确切地说就是替身前后左右空间距离的一半。身高参数给出的是当前视点距地面的高度,也就是从地面到浏览者替身眼睛之间的距离。步高决定了浏览者替身在虚拟空间中能直接跨越的空间造型的最大高度值,浏览者替身在虚拟世界中行走时能够直接迈上高度小于或等于步高参数的空间造型,而对于高度大于步高参数的空间造型,浏览者只能饶行而不能直接跨越。
在VRML虚拟世界中浏览方式就是浏览者在空间的移动方式,包括:行走(WALK)、飞行(FLY)、查看(EXAMINE)以及没有浏览方式(NONE)4种情况。给定了浏览方式的同时,还可以通过NavigationInfo节点给出浏览者杂司虚拟空间中的浏览速度,单位是VRML单位每秒。
通常在一个VRML文件中NavigationInfo节点和Viewpoint视点是同时出现的,因为这两个都是用来控制浏览者本身的特征参数的,只是前者是控制浏览者替身如何在虚拟空间中的移动;而后者则是控制浏览者通过怎样的空间视点来观察这个虚拟空间。
NavigationInfo节点语法:
NavigationInfo {
type "WALK" #域值类型 MFString
speed 1.0 #域值类型 SFFloat
headlight TRUE #域值类型 SFBool
avatarSize [0.25,1.6,0.75] #域值类型 MFFloat
visibilityLimit 0.0 #域值类型 SFFloat
set_bind #输入接口 SFBool
isBound #输出接口 SFBool
}
type域值用来指定浏览者替身在虚拟世界中的浏览方式,其中:行走(WALK)、飞行(FLY)、查看(EXAMINE)以及没有浏览方式(NONE)是VRML提供的4种标准方式,但不是所有的浏览方式。type域值是一个浏览方式名称的列表,所给出的是一系列按照优先级高低从前向后依次排列的浏览方式名称。type域的域值可以通过输入接口set_type进行重新设置,新的type域的域值将通过输出接口type_shanged传递出去。
speed域值用来指定浏览者替身在虚拟世界中的行走、飞行以及查看一个空间造型的基准速度,单位是VRML单位每秒。(可以使用事件接口)
headlight指定浏览者替身的头顶灯是否打开,默认值为头顶灯处于打开的状态,这时浏览者在浏览器中能看到一个明亮的虚拟世界。(可以使用事件接口)
avatarSize指定浏览者替身大小的特征参数,这是一个有3个特征数组成的数组。3个特征数分别指定替身的宽度参数、高度参数和步高参数。(可以使用事件接口)
visibilityLimit域值用来指定浏览者替身在虚拟世界中的能见度的高低,其给出的是一个以VRML单位为单位的数值,缺省域值为0.0,在大于这个空间距离之外的空间造型将不会在浏览器窗口中显示出来。但这并不代表替身在虚拟空间中的能见度为零,而是给定了一个无限远的能见度,这时在浏览者替身视野范围之内的空间场景的显示取决于计算机的硬件水平。(可以使用事件接口)
NavigationInfo节点的set_bind输入接口和isBound输出接口主要用在空间视点之间相互切换的时候。当浏览者在浏览窗口中从当前的浏览者替身切换到另外一个浏览者替身时依次将有下面的事件发生,首先向当前浏览者替身中发送FALSE值,然后NavigationInfo节点的输出接口isBound同时向外发送一个FALSE值;而新的浏览者替身NavigationInfo节点的输入接口set_bind则会接受到一个TRUE值,然后输出接口isBound也将同时向外发送一个TRUE侄。
[在不同的空间距离上观察到的同一个空间造型.wrl]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -