Extensible 3D (X3D)
Part 1: Architecture and base components

24 Environmental effects component

环境效果组件

--- X3D separator bar ---

cube 24.1 介绍

24.1.1 名称

这部分组件的名称是 "EnvironmentalEffects"。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。

24.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Environmental Effects component(环境效果组件)。这个组件中的节点支持诸如全景图背景或雾这样的真实环境效果的创建。表 24.1 列出了这一条款的主要主题。

表 24.1 — 主题

cube 24.2 概念

Background 节点使用指定的色彩背景幕(backdrop)来模拟地面和天空。Background 节点 还可以指定放在天空和地面之前,所有几何体之后的纹理背景、或称全景图(panorama)。Background 节点在局部坐标系统中指定,并按以下描述的方式受起祖先的旋转累积的影响。X3D 支持两种类型的背景节点,一种是包含一组 url 域以指定静态图像来组成的背景 (参见 24.4.1, Background),另一种复杂的背景节点包含任意的 X3DTexture 节点以组成背景(参见 24.4.3, TextureBackground)。两种背景节点都由基本类型 X3DBackgroundNode 衍生而来。应用程序可以使用简化的 Background 节点,或使用 TextureBackground 节点以取得更多地弹性和额外的特性。

Background 节点是 7.2.2, 可绑定子节点 Bindable children nodes 中描述的可绑定子节点。将维持有一个 Background 堆栈,堆栈中最顶端的 Background 节点就是当前活动的 Background 节点。发送到其 set_bind 域的 TRUE 值,就可以把这个 Background 节点推到堆栈顶部。一旦被激活,这个 Background 节点就会绑定到浏览器视图上。发送到其 set_bind 域的 FALSE 值,就可以把这个 Background 节点从堆栈顶部弹出,并且解除其对浏览器视图的绑定。

背景幕从概念上说是一个局部坐标系中的整球(表示天空)和一个其中包裹的半球(代表地面),观测者被放置在球的中心。两个球都有无限的半径,每个球都用和此球体局部 Y 轴垂直的插值色彩的同心圆来着色。Background 节点受其祖先变换的旋转累积的控制,缩放和平移变换将被忽略。和地面球相比,天空球离观测者总是略远一些,这样在天空地面交界的地方地面看起来总是在天空前面。

skyColor 域指定在天空球体上不同角度处的天空颜色。skyColor 域中的第一个值指定天空在表示天顶(zenith 例如从观测者垂直向上)的 0.0 弧度处的颜色。skyAngle 指定了从天顶向下的角度,每个向下的角度都是一个显示特定色彩的同心圆。球体的天顶隐含定义为 0.0 弧度,自然的地平线位于 π/2 弧度,天底(nadir 例如从观测者垂直向下)位于 π 弧度。 skyAngle 限制为 [0.0, π] 范围中非递减的值。skyColor 中的值应比 skyAngle 中的值多一个。因为第一个色彩值为天顶处的色彩值,不由 skyAngle 域指定。如果最后一个 skyAngle 小于 π,则最后一个 skyAngle 和天底之间的色彩带钳位为最后一个 skyColor。天空的颜色在指定的 skyColor 值之间线形地插值。

groundColor 域指定在地面球体上不同角度处的地面颜色。groundColor 域中的第一个值指定地面在表示天底(nadir 例如从观测者垂直向下)的 0.0 弧度处的颜色。groundAngle 指定了从天底向上的角度,每个向上的角度都是一个显示特定色彩的同心圆。球体的天底顶隐含定义为 0.0 弧度。groundAngle 限制为 [0.0, π/2] 范围中非递减的值。groundColor 中的值应比 groundAngle 中的值多一个。因为第一个色彩值为天底顶处的色彩值,不由 groundAngle 域指定。如果最后一个 groundAngle 小于 π/2,则最后一个 groundAngle 和赤道圈之间的区域不存在。地面的颜色在指定的 groundColor  值之间线形地插值。

backbottomfrontleftrighttop 域指定了一组用来定义背景全景图的图像,全景图将被放置在地面/天空背景幕之前场景几何体之后。全景图由六副图像构成,其中每一个图像都将影射到一个无限大的立方体的面上,此立方体包含在背景球幕的内部,且定位于局部坐标系的中心。六副图像被单独的应用到立方体的对应的六个面上。 在立方体的前、后、右、左面上,以原点向 -Z 轴看时,视图向上为 +Y 轴,每一个图像都以其在 2D 方向上的相同显示方向映射到响应的面上(back 为后面,front 为前面,left 为左面,right 为右面)。在立方体的顶面上,当从原点看向 +Y 轴时,视图向上的方向为 +Z 轴,top 图像以其在 2D 方向上的相同显示方向映射到顶面。在底方体的顶面上,当从原点看向 -Y 轴时,视图向上的方向为 -Z,bottom 图像以其在 2D 方向上的相同显示方向映射到顶面。

附图 24.1 图解了 Background 节点的背景幕和背景纹理。

全景图像中的 Alpha 值(例如双分量或四分量图像)指定了图像中允许 groundColorskyColor 可见透明的或半透明的区域。

纹理贴图的一般描述见 18 纹理组件 Texturing component

一般不指定 bottom 和  top 图像,这样可以显示天空和地面。其它的四副图像可以用来描绘四周环绕的山脉或其它的远景。

Background node

附图 24.1Background 节点

全景图像可以为单分量(灰度),双分量(灰度加 alpha),三分量(全 RGB 色彩),四分量(全 RGB 色彩加 alpha)。

地面色彩、天空色彩、全景图图像相对观测者旋转,但是相对观测者不平移。观测者从不能接近背景,但是可以转动方向查看全景图立方体的所有面,可以向上或向下查看地面或天空的同心圆环的色彩。(如果可见)。

Background 节点不受 Fog 节点的影响。因此,如果 Background 节点是激活的(例如被绑定)同时 Fog 节点也是激活的,那么 Background 节点将显示为没有雾化效果。创作者需要把 Background 值设置的和 Fog 值相符(例如 随距离的增加,地面颜色淡入到雾的颜色,全景图的颜色也染上雾的颜色)。Background 节点不受光源影响。

cube 24.3 抽象类型

24.3.1 X3DBackgroundNode

X3DBackgroundNode : X3DBindableNode { 
  SFBool   [in]     set_bind
  MFFloat  [in,out] groundAngle []      [0,π/2]
  MFColor  [in,out] groundColor []      [0,1]
  SFNode   [in,out] metadata    NULL    [X3DMetadataObject]
  MFFloat  [in,out] skyAngle    []      [0,π]
  MFColor  [in,out] skyColor    0 0 0   [0,1]
  SFTime   [out]    bindTime
  SFBool   [out]    isBound
}

X3DBackgroundNode 是所有背景节点由此衍生的抽象类型。X3DBackgroundNode 是一个可绑定子节点,当其绑定时定义了场景的全景图和背景。背景的完整信息见 24.2 概念

cube 24.4 节点参考

24.4.1 Background

Background : X3DBackgroundNode {
  SFBool   [in]     set_bind
  MFFloat  [in,out] groundAngle []    [0,π/2]
  MFColor  [in,out] groundColor []    [0,1]
  MFString [in,out] backUrl     []    [urn]
  MFString [in,out] bottomUrl   []    [urn]
  MFString [in,out] frontUrl    []    [urn]
  MFString [in,out] leftUrl     []    [urn]
  SFNode   [in,out] metadata    NULL  [X3DMetadataObject]
  MFString [in,out] rightUrl    []    [urn]
  MFString [in,out] topUrl      []    [urn]
  MFFloat  [in,out] skyAngle    []    [0,π]
  MFColor  [in,out] skyColor    0 0 0 [0,1]
  SFTime   [out]    bindTime
  SFBool   [out]    isBound
}

Background 是一个使用六副图像组成一个背景幕的背景节点。Background 节点中的 common 域在 24.2 概念 中描述。backUrlbottomUrlfrontUrlleftUrlrightUrltopUrl 域中浏览器应支持 JPEG(见 2.[JPEG])和 PNG(见 2.[I15948])图像文件格式,另外也可以支持其它的可被渲染为 2D 图像的图像文件格式(例如 CGM),推荐支持 GIF(包括透明度)格式(见 [GIF])。url 域的细节见 9.2.1 URLs

24.4.2 Fog

Fog : X3DBindableNode {
  SFBool   [in]     set_bind
  SFColor  [in,out] color           1 1 1    [0,1]
  SFString [in,out] fogType         "LINEAR" ["LINEAR"|"EXPONENTIAL"]
  SFNode   [in,out] metadata        NULL     [X3DMetadataObject]
  SFFloat  [in,out] visibilityRange 0        [0,∞)
  SFTime   [out]    bindTime
  SFBool   [out]    isBound
}

根据不同对象和观测者间的距离,Fog 节点把由 color 域指定的色彩不同程度地和对象混合,以提供了一种模拟大气效果的方法。距离在 Fog 节点的坐标空间中计算。visibilityRange 以米为单位(在局部坐标系中)指定了对象完全消失在雾里的距离。离观测者距离 visibilityRange 之外的对象将完全由 color 域的颜色不变的绘制。离观测者接近的对象值混合很少的雾的颜色。visibilityRange 为 0.0 将禁止 Fog 节点的效果。visibilityRange 受 Fog 节点的父层的缩放变换影响;平移和旋转不影响 visibilityRangevisibilityRange 域的值应在 [0,∞) 范围。

由于 Fog 节点是可绑定子节点(见 7.2.2 可绑定子节点 Bindable children nodes),将维持有一个 Fog 节点堆栈,堆栈中最顶端的 Fog 节点就是当前活动的节点。发送到其 set_bind 域的 TRUE 值,就可以把这个 Fog 节点推到堆栈顶部。一旦被激活,这个 Fog 节点就会绑定到浏览器视图上。发送到其 set_bind 域的 FALSE 值,就可以把这个 Fog 节点从堆栈顶部弹出,并且解除其对浏览器视图的绑定。堆栈的细节见 7.2.2 可绑定子节点 Bindable children nodes.

fogType 域控制了以一个距离函数的形式控制了将有多少颜色混合和对象混合。如果 fogType 为 "LINEAR",混合的量是距离的线性函数,将产生深度暗示的效果。如果 fogType 为 "EXPONENTIAL," 将使用指数增长的混合度,结果雾的外观将更自然。

雾对光照计算的影响的描述见 17 Lighting component.

24.4.3 TextureBackground

TextureBackground : X3DBackgroundNode {
  SFBool  [in]     set_bind
  MFFloat [in,out] groundAngle   []    [0,π/2]
  MFColor [in,out] groundColor   []    [0,1]
  SFNode  [in,out] backTexture   NULL  [X3DTextureNode]
  SFNode  [in,out] bottomTexture NULL  [X3DTextureNode]
  SFNode  [in,out] frontTexture  NULL  [X3DTextureNode]
  SFNode  [in,out] leftTexture   NULL  [X3DTextureNode]
  SFNode  [in,out] metadata      NULL  [X3DMetadataObject]
  SFNode  [in,out] rightTexture  NULL  [X3DTextureNode]
  SFNode  [in,out] topTexture    NULL  [X3DTextureNode]
  MFFloat [in,out] skyAngle      []    [0,π]
  MFColor [in,out] skyColor      0 0 0 [0,1]
  MFFloat [in,out] transparency  0     [0,1]
  SFTime  [out]    bindTime
  SFBool  [out]    isBound
}

TextureBackground 是一个使用六个独立的纹理节点组成一个背景幕的背景节点。不向 Background 节点只支持由 URL 域引用的静态图像格式,TextureBackground 节点的内容可以是任意的纹理类型,这些纹理类型包括 ImageTexturePixelTextureMovieTextureMultiTexture。TextureBackground 节点的一般域在 24.2 概念 中描述。

TextureBackground 支持附带动画的丰富的背景的创建。它也允许创作者附加载入传感器(见 9.4.3 LoadSensor)以使节点的纹理接收通知确定何时背景元素被载入。

TextureBackground 支持 transparency(透明)值场景被其它此应用中的元素覆盖。 transparency 非 0 的透明值允许此应用中包含其场景的应用程序的下面一层窗口被显示出来,这样浏览器和包含其的应用程序能支持和下面一层窗口的复合显示。

backTexturebottomTexturefrontTextureleftTexturerightTexturetopTexture 域中,浏览器应支持当前概貌下应支持的所有的 X3DTexture 节点类型。

cube 24.5 支持级别

Environmental Effects 组件提供 表 24.2 中规定的三个支持级别(levels)。Level 1 是为了使轻量化概貌能支持简单的背景。Level 2 提供了附加的环境效果,包括全部的背景特性、雾和有限的纹理背景。 Level 3 提供了纹理背景的完整支持。

表 24.2Environmental effects 组件支持级别

级别
Level
必备条件 节点/特性 支持
1 Core 1
Time 1
Grouping 1
X3DBackgroundNode (抽象) n/a
Background groundAnglegroundColor 可选地支持,backURLfrontURLleftURLrightURLtopURL 可选地支持。skyAngle  可选地支持。一个 skyColor.
2 Core 1
Time 1
Grouping 1
Level 1 的所有 Environmental Effects 节点 所有域完全支持。
Fog 所有域完全支持。
3 Core 1
Time 1
Grouping 1
   
Level 1 的所有 Environmental Effects 节点 所有域完全支持。
TextureBackground 所有域完全支持。

--- X3D separator bar ---

Site Meter