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

28 Distribute interactive simulation (DIS) component

分布式交互模拟组件

--- X3D separator bar ---

cube 28.1 介绍

28.1.1 名称

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

28.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Distributed Interactive Simulation (DIS) component(分布式交互模拟组件)。表 28.1 列出了这一条款的主要主题。

表 28.1 — 本条款的主题

cube 28.2 概念

28.2.1 DIS 的概述

IEEE 1278 DIS 标准(Distributed Interactive Simulation 见 2.[IEEE1278] )是为军事模拟设置的通讯标准。DIS - 分布式交互模拟标准 - 定义了一系列的二进制的数据包来传输交互模拟的信息。IEEE 1278 标准 一般用于军方的应用,标准涵盖了很大范围的数据,包括完整的位置,速度,方位,和更多的不常用的特性,比如电子战和后勤供给的信息。尽管 DIS 原来是设计用在军事模拟上的,但 DIS 也参考地应用于民用。

DIS 组件包括四个节点:ESPDUTransform,SignalPdu,ReceiverPdu,TransmitterPdu。可以使用这些节点,通过网络发送或接受 称为协议数据单元(Protocol Data Units (PDUs))的 DIS 兼容的信息。这些节点将支持七种 DIS PDU 信息类型:Collision、Detonate、Entity State、Fire、Receiver、Signal、Transmitter。由 DIS 协议定义的其它的 DIS PDUs 并没有在 X3D 中定义相应映射。

28.2.2 网络通信

DIS 数据包一般都是通过 UDP(User Datagram Protocol 用户数据包协议)传输。但是也可以使用组播、单播、广播这样的传输机制来进行网络通讯。每种 X3D DIS 节点都通过 UDP socket 通讯,一般允许组播来读/写 DIS 消息。在多主机的跨网络的 X3D 场景中,这些信息可以用来沟通和修改其中虚拟实体的位置和方向。每个 DIS 执行将负责管理 sockets。新的实体(entities)将由 DIS 节点注册以发送/接受网络更新。注意这里“实体”是抽象的高层的;例如在位置更新的情况下,实际的 X3D 场景图对象的修改可能是一个 Transform 节点(对应 EspduTransform),实体动画的几何体将包含在其相应的子域中。

28.2.3 一般 DIS 域

DIS 节点中有许多和 DIS 节点一般行为相关的描述域。
 
一般域包括符合 DIS 标准的信息头、内容信息,网络状态,建立或修改网络通讯的配置数据。

和 DIS 节点行为描述相关的一般域有:isActive、timestamp、networkMode、isStandAlone、isNetworkReader、isNetworkWriter、readInterval、writeInterval

isActive 域指示节点是(当输出 TRUE否(当输出 FALSE)接受了 DIS 消息。DIS 实体在一段时间(一般为 5 秒)后将被当作非活动的,可以通过监听节点来接受事件。

timestamp 域提供了一个参照局部时间系的 DIS 消息到达的时间(SFTime)。

networkMode 域指示了 X3D DIS 节点采用以下三种方法中的哪一种来运作:独立于网络,写更新的发送器,读更新的接收器。

在 DIS 节点初始化时,或任何 networkMode 改变时,域 isStandAloneisNetworkReaderisNetworkWriter 分别发送相应的 TRUEFALSE 事件。这些域匹配了 networkMode 的状态。在任何时刻,这三个域中只能有一个值为 TRUE。

readInterval 域是检测 DIS 消息接受的以秒为单位的时间间隔。设置 readInterval 值为 0 将禁止 DIS 消息的读取。writeInterval 是 DIS 消息发送的以秒为单位的时间间隔。设置 writeInterval 值为 0 将禁止 DIS 消息的发送。

和 DIS 实体的标准化标识相关的一般域为:siteIDapplicationIDentityID

siteID 域和 applicationID 域用来建立 DIS PDU Simulation Address(模拟地址)记录。为了模拟演练,每个 DIS 站(site)将被赋予一个唯一的标识符,每个 DIS 站中的每个模拟应用(application)也将被赋予一个在此站中唯一的应用标识符。这两个域为 16 比特位的无符号数。一般的演练将为 siteID 赋一个关于参与者 IP(Internet Protocol)主机地址的四个八位字节。entityID 域进一步识别隶属于特定 PDU(例如用于更新特定模拟实体的位置和方向的 Entity State PDU(实体状态 PDU))的 DIS 实体。entityID 是一个 16 比特位的无符号数。

DIS 应用中的每一个实体都被赋予一个三份组标识符(域 siteIDapplicationIDentityID),这个标识符在特定应用或整个演练的所有实体中都应是唯一的。实体标识符三份组在整个应用时期都有效。

和 DIS 网络通讯相关的一般域有:addressportmulticastRelayHostmulticastRelayPortrtpHeaderExpectedrtpHeaderHeard

address 域指示了用来传输消息的组播地址(例如 "224.2.181.145" 或 "localhost")。port 域指示了发送或接受 DIS 消息的组播端口(例如 62040)。

为了使 DIS 更兼容单播和组播在广域网(WAN)上的路由的 Internet 惯例,使用域 multicastRelayHostmulticastRelayPortrtpHeaderExpectedrtpHeaderHeard 为 IEEE DIS 协议(见 2.[IEEE1278])提供网络扩展。如果需要广域组播但在局域不可用,multicastRelayHost 域和 multicastRelayPort 域提供了一个后备的服务器地址和端口,以创建一个连接到组播的替代服务器连接的单播隧道。域 rtpHeaderExpected 指示了将挂起的节点将接受或发送的 DIS PDU 消息的实时协议(Real Time Protocol,见 2.[RFC1889])头(当域设置为 TRUE)。 rtpHeaderHeard 指示了挂起的收入 DIS 消息的 RTP 头。

cube 28.3 节点参考

以下段落描述了 DIS 组件的节点。

28.3.1 EspduTransform

EspduTransform : X3DGroupingNode { 
  MFNode     [in]     addChildren
  MFNode     [in]     removeChildren
  MFNode     [in out] children                     []  
  SFVec3f    [in out] translation                  0 0 0         (-∞,∞)
  SFRotation [in out] rotation                     0 0 1 0       (-∞,∞)|[-1,1]
  SFVec3f    [in out] center                       0 0 0         (-∞,∞)
  SFVec3f    [in out] scale                        1 1 1         (-∞,∞)
  SFRotation [in out] scaleOrientation             0 0 1 0       (-∞,∞)|[-1,1]
  SFVec3f    [in out] bboxCenter                   0 0 0         (-∞,∞)
  SFVec3f    [in out] bboxSize                     -1 -1 -1      (-∞,∞)
	
  SFInt32    [in out] articulationParameterCount                  0     [0,78]
  MFInt32    [in out] articulationParameterDesignatorArray       []     [0,255]
  MFInt32    [in out] articulationParameterChangeIndicatorArray  []     [0,255]
  MFInt32    [in out] articulationParameterIdPartAttachedToArray []     [0,65535]
  MFInt32    [in out] articulationParameterTypeArray             []     
  MFFloat    [in out] articulationParameterArray                 []     (-∞,∞)
  SFFloat    [in]     set_articulationParameterValue0                   (-∞,∞)
  SFFloat    [in]     set_articulationParameterValue1                   (-∞,∞)
  SFFloat    [in]     set_articulationParameterValue2                   (-∞,∞)
  SFFloat    [in]     set_articulationParameterValue3                   (-∞,∞)
  SFFloat    [in]     set_articulationParameterValue4                   (-∞,∞)
  SFFloat    [in]     set_articulationParameterValue5                   (-∞,∞)
  SFFloat    [in]     set_articulationParameterValue6                   (-∞,∞)
  SFFloat    [in]     set_articulationParameterValue7                   (-∞,∞)
  SFFloat    [out]    articulationParameterValue0_changed               (-∞,∞)
  SFFloat    [out]    articulationParameterValue1_changed               (-∞,∞)
  SFFloat    [out]    articulationParameterValue2_changed               (-∞,∞)
  SFFloat    [out]    articulationParameterValue3_changed               (-∞,∞)
  SFFloat    [out]    articulationParameterValue4_changed               (-∞,∞)
  SFFloat    [out]    articulationParameterValue5_changed               (-∞,∞)
  SFFloat    [out]    articulationParameterValue6_changed               (-∞,∞)
  SFFloat    [out]    articulationParameterValue7_changed               (-∞,∞)

  SFString   [in out] marking                      ""
  SFInt32    [in]     forceID                      0             [0,255]
  SFInt32    [in]     entityKind                   0             [0,255]
  SFInt32    [in]     entityDomain                 0             [0,255]
  SFInt32    [in]     entityCountry                0             [0,65535]
  SFInt32    [in]     entityCategory               0             [0,255]
  SFInt32    [in]     entitySubCategory            0             [0,255]
  SFInt32    [in]     entitySpecific               0             [0,255]
  SFInt32    [in]     entityExtra                  0             [0,255]
  SFVec3f    [in out] linearVelocity               0 0 0         (-∞,∞)
  SFVec3f    [in out] linearAcceleration           0 0 0         (-∞,∞)
  SFInt32    [in]     deadReckoning                              [0,255]
	
  SFBool     [out]    isCollided                     
  SFTime     [out]    collideTime                                [0,∞)
  SFInt32    [in]     eventApplicationID                         [0,65535]
  SFInt32    [in]     eventSiteID                                [0,65535]
  SFInt32    [in]     eventEntityID                              [0,65535]
  SFInt32    [in]     collisionType                              [0,255]
  SFInt332   [in]     eventNumber                  1             [0,65355]
	
  SFTime     [out]    firedTime                                  [0,∞)
  SFBool     [in out] fired1                       FALSE
  SFBool     [in out] fired2                       FALSE
  SFVec3f    [in out] munitionStartPoint           0 0 0         (-∞,∞)
  SFVec3f    [in out] munitionEndPoint             0 0 0         (-∞,∞)
  SFInt32    [in]     munitionApplicationID                      [0,65535]
  SFInt32    [in]     munitionSiteID                             [0,65535]
  SFInt32    [in]     munitionEntityID                           [0,65535]
  SFInt32    [in]     fireMissionIndex                           [0,65535]
  SFInt32    [in]     warhead                                    [0,65535]
  SFInt32    [in]     fuse                                       [0,65535]
  SFInt32    [in]     munitionQuantity                           [0,65535]
  SFInt32    [in]     firingRate                                 [0,65535]
  SFFloat    [in]     firingRange                                (0,∞)
  SFBool     [out]    isDetonated                    
  SFTime     [out]    detonateTime                               [0,∞)
  SFVec3f    [in]     detonationLocation           0 0 0         (-∞,∞)
  SFVec3f    [in]     detonationRelativeLocation   0 0 0         (-∞,∞)
  SFInt32    [in]     detonationResult                           [0,255]
	
  SFBool     [out]    isActive
  SFTime     [out]    timestamp
  SFString   [in out] networkMode                  "standAlone"  ["standAlone" "networkReader" "networkWriter"]
  SFBool     [out]    isStandAlone
  SFBool     [out]    isNetworkReader
  SFBool     [out]    isNetworkWriter
  SFFloat    [in out] readInterval                 0.1           [0,∞)
  SFFloat    [in out] writeInterval                1.0           [0,∞)
  SFInt32    [in]     applicationID                1             [0,65535]
  SFInt32    [in]     siteID                       0             [0,65535]
  SFInt32    [in]     entityID                     0             [0,65535]
  SFString   [in out] address                      "localhost"
  SFInt32    [in out] port                         0             [0,65535]
  SFString   [in out] multicastRelayHost           ""
  SFInt32    [in out] multicastRelayPort           0             
  SFBool     [in out] rtpHeaderExpected            FALSE
  SFBool     [out]    isRtpHeaderHeard
}

EspduTransform 是一个可包含大多节点并执行 X3DBoundedObject 界面的组节点。EspduTransform 整合以下 DIS PDU 功能:EntityStatePDU、CollisionPDU、DetonatePDU、FirePDU、CreateEntity、RemoveEntity。以下的描述识别 EspduTransform 节点中和这些 PDU 相关的域。

作为一个组节点,EspduTransform 有 addChildrenremoveChildren 事件允许修改其下级场景图的结构。removeChildren 事件从 EspduTransform 的 children 域中移除节点。任何在 removeChildren 事件中而不在 EspduTransform 的 children 列表中的节点将被忽略。添加到 children 域中的节点将添加此节点到 EspduTransform 的子集中。添加任何已存在 EspduTransform 子列表中的节点到其 children 域将不合法。添加任何此组的祖先节点到 EspduTransform 的 children 域将不合法。

在 EspduTransform 节点中而没有在前述一般 DIS 域中描述的域有:translationrotationcenterscalescaleOrientationbboxCenterbboxSizearticulationParameterCountarticulationParameterDesignatorArrayarticulationParameterChangeIndicatorArrayarticulationParameterIdPartAttachedToArrayarticulationParameterTypeArrayarticulationParameterArrayset_articulationParameterValue0set_articulationParameterValue1set_articulationParameterValue2set_articulationParameterValue3set_articulationParameterValue4set_articulationParameterValue5set_articulationParameterValue6set_articulationParameterValue7articulationParameterValue0_changedarticulationParameterValue1_changedarticulationParameterValue2_changedarticulationParameterValue3_changedarticulationParameterValue4_changedarticulationParameterValue5_changedarticulationParameterValue6_changedarticulationParameterValue7_changedmarkingforceIDentityKindentityDomainentityCountryentityCategoryentitySubCategoryentitySpecificentityExtralinearVelocitylinearAccelerationdeadReckoningisCollidedcollidedTimeeventApplicationIDeventSiteIDeventEntityIDcollisionTypeeventNumberfired1fired2firedTimemunitionStartPointmunitionEndPointfireMissionIndexmunitionApplicationIDmunitionSiteIDmunitionEntityIDwarheadfusemunitionQuantityfiringRatefiringRangeisDetonateddetonateTimedetonationLocationdetonationRelativeLocationdetonationResult

EntityStatePDU 提供了一个实体新的位置和方向的通知,其直接对应了 X3D Transform 节点功能。translation 域提供了一个 DIS 坐标系下的新位置。X3D/VRML 坐标系和 DIS 坐标系是有区别的。如果 (x, y, z) 位于 X3D/VRML 坐标系中的一个点的坐标,同样点在对应 DIS 坐标系的坐标将为 (x, -z, y)。注意 X3D 场景中只使用 X3D 坐标。当向网络中写 DIS PDU 时,EspduTransform 节点将执行坐标到 DIS 坐标的内在的转换;当从网络中读 DIS PDU 时,EspduTransform 节点将执行 DIS 坐标到 X3D 坐标的内在的转换。

rotation 域提供实体的旋转,其中旋转的执行是以 center 域为中心的。scale 域提供了一个沿 x, y, z 轴的缩放,scaleOrientation 域提供了沿指定的 rotation 的预缩放参数。translationrotationscalecenter 域直接对应了 Transform 节点中的功能。bboxCenter 域和 bboxSize 域(属于 X3DBoundedObject 的界面)分别指定了包含在 EspduTransform 组节点中的实体几何体的立方体边界盒的中心和尺寸,对应 X3D Transform 节点的相同域。

articulationParameterCount 域(8 比特位的无符号数)指示了用于描述实体模型不同段的关节(articulation)的参数的数量。举例来说,一个包含一个可旋转的炮塔和一挺可俯仰机枪的坦克可能由两个关节参数来描述,或一个人形化模型中不同段的方向可以由一些不同的关节参数来描述。在 Entity State PDU 中可记录关节参数的最大数为 78,此值是由 PDU 的最大长度限制的。

为了方便 X3D 创作中使用 ROUTE 到关节参数的事件/从关节参数 ROUTE 来的事件,前 8 个关节参数值可以由 accessType 为 inputOnly/outputOnly 域(set_articulationParameterValue0, ..., set_articulationParameterValue7 and articulationParameterValue0_changed, ..., articulationParameterValue7_changed)来存取。

articulationParameterDesignatorArrayarticulationParameterChangeIndicatorArrayarticulationParameterIdPartAttachedToArrayarticulationParameterTypeArray 对应每个关节参数记录中附加的值。这些数组中的元素按顺序对应每个关节参数。

marking 域为一个 SFString 值(最大 11 个字符),它对应了选定的 DIS 标准中(完全一致)或使用 EspduTransform 节点的非一致应用中标记的枚举集。

forceID 域和 entityKind 域为 8 比特位的识别枚举。entityDomain 域(8 比特位枚举值)指示了运作此实体(不包括弹药 munition 实体)的域(例如 subsurface, surface, land)。弹药实体的此域用来指定目标的域。entityCountry 域(16 比特位枚举值)指定了实体设计归属的国家。entityCategory 域(8 比特位枚举值)指定了此实体描述所属的主类目。entitySubCategory 域(8 比特位枚举值)指定了一个基于类目标识值的子类目。entitySpecific 域(8 比特位枚举值)提供了实体基于的子类目标识域的规格的信息。entityExtra 域(8 比特位枚举值)提供了关于实体的额外的信息。DIS 规格也允许按识别一个包括以上描述的相同域 (Entity Kind, Domain, Country, Category, Subcategory, Specific, Extra) 的 Alternative Entity Type(可选实体类型)。

直接提供的枚举(enumeration)值或额外的参考见 IEEE 1278 中的规格(见 2.[IEEE1278])。

linearVelocity 域和 linearAcceleration 域为各个航位推测计算提供线性速度和加速度矢量。将应用的航位推测的运算法则在 deadReckoning 域(8 比特位枚举值)中标识。

CollisionPDU 是发送到一个发生碰撞的实体的通知。发出(issuing)实体用 28.2.3, 一般 DIS 域 中描述的 entityID 域标识。isCollided 域是一个指示碰撞是 (TRUE) 否发生的 Boolean 值。collideTime 域决定碰撞发生的时间(SFTime)。在一个 CollisionPDU 消息中,eventSiteIDeventApplicationIDeventEntityID 三值组唯一地标识出(当已知时)与发出实体碰撞的实体。collisionType 域(8 比特位枚举值)标识了发生的碰撞的类型。

eventNumber 域为每一个演练设置,每次的开火事件、碰撞事件、电磁任务等事件都将逐一添加此域的值。

FirePDU 通知模拟应用在一个实体中有一个武器在开火。开火的实体用 28.2.3, 一般 DIS 域 中描述的 entityID 域标识。域 fired1(设置为 TRUE 时)指示实体的主武器开火;fired2(设置为 TRUE 时)指示次武器开火。firedTime 域给出了开火发生的时间(SFTime)。域 munitionStartPointmunitionEndPoint 描述了弹药从武器开火到爆炸(或撞击)的路径。fireMissionIndex 域指示了开火的任务(如果已知)。firingRange 域以米为单位指定了实体火力控制系统采取的火力控制的方案计算的范围。

在 FirePDU 消息中,eventSiteIDeventApplicationIDeventEntityID 三值组唯一地标识出(当已知时)目标实体。对于 FirePDU 和 DetonatePDU 消息,munitionSiteIDmunitionApplicationIDmunitionEntityID 三值组唯一地标识出(当已知时)弹药实体。

FirePDU 和 DetonatePDU 消息在 warhead(16 比特位枚举值)域、fuse(16 比特位枚举值)域、munitionQuantity(16 比特位的无符号数)域、firingRate(16 比特位的无符号数)域中提供了爆炸的信息描述。

DetonatePDU 提供了一个弹药已经爆炸或撞击的通知,以使其它的实体能决定由爆炸造成的损坏。detonated 域指示是TRUE否发生损坏。detonateTime域给出了损坏发生的时间(SFTime)。这将允许其它实体决定它们在爆炸发生时相对爆炸点的位置。

DetonatePDU 提供了场景(world)坐标下的 detonationLocation(爆炸位置),以及在目标实体的坐标系下的相对的爆炸或撞击的位置 detonationRelativeLocationdetonationResult 域(8 比特位枚举值)提供了爆炸事件结果的信息。

CreateEntityPDU 通知其它实体有一个新建的实体加入到演练中。用 28.2.3, 一般 DIS 域 中描述的 siteIDapplicationIDentityID 三值组唯一地标识出新建的实体。当启动或新建的实体时将发送 CreateEntityPdu。

RemoveEntityPDU 通知其它实体有一个实体从演练中移除。用 28.2.3, 一般 DIS 域 中描述的 siteIDapplicationIDentityID 三值组唯一地标识出移除的实体。当关闭或移除已存在的实体时发送 RemoveEntityPDU。

28.3.2 SignalPdu

SignalPdu : X3DChildNode {
  SFInt32  [in]     radioID                          [0,65535]
  SFInt32  [in]     encodingScheme                   [0,65535]
  SFInt32  [in]     tdlType                          [0,65535]
  SFInt32  [in]     sampleRate                       
  SFInt32  [in]     samples                          [0,65535]
  SFInt32  [in]     dataLength                       [0,65535]
  MFInt32  [in]     data                             [0,255]                  
  SFInt32  [in out] whichGeometry        1           [-1,∞)
  SFVec3f  [in out] bboxCenter           0 0 0       (-∞,∞)
  SFVec3f  [in out] bboxSize             -1 -1 -1    (-∞,∞)
  SFBool   [out]    isActive
  SFTime   [out]    timestamp
  SFString [in out] networkMode  "standAlone"        ["standAlone" "networkReader" "networkWriter"]
  SFBool   [out]    isStandAlone
  SFBool   [out]    isNetworkReader
  SFBool   [out]    isNetworkWriter
  SFFloat  [in out] readInterval       0.1           [0,∞)
  SFFloat  [in out] writeInterval      1.0           [0,∞)
  SFInt32  [in out] applicationID        1           [0,65535]
  SFInt32  [in out] siteID               0           [0,65535]
  SFInt32  [in out] entityID             0           [0,65535]
  SFString [in out] address         "localhost"
  SFInt32  [in out] port                 0           [0,65535]
  SFString [in out] multicastRelayHost   ""
  SFInt32  [in out] multicastRelayPort   0           
  SFBool   [in out] rtpHeaderExpected  FALSE
  SFBool   [out]    isRtpHeaderHeard
}

SignalPdu 是一个执行 X3DBoundedObject 界面的 X3DChildNode 节点。语音、音频或其它的通信数据的发射都是通过 SignalPdu 节点发出的 Signal PDU 实现的。在 SignalPdu 节点中而没有在前述一般 DIS 域中描述的域有:radioIDencodingSchemetdlTypesampleRatedataLengthsamplesdata、andwhichGeometry

radioID 域标识了一个给定实体(entityID)中的一个特定的无线电。radioID(16 比特位的无符号整数)被赋予从 1 开始序列化值。实体 ID(entityID)和无线电 ID(radioID)的组合在整个模拟演练中都将是唯一的。encodingScheme 域(16 比特位枚举值)指派了一个 Encoding Class(编码类)枚举值(最高的 2 比特位):

0 = Encoded Voice ;                     (编码语音)
1 = Raw Binary Data ;                  (原始二进制数据)
2 = Application-Specific Data ;       (应用规格的数据)
3 = Database Index 。                    (数据库索引)

和一个 Encoding Type(编码类型)枚举值(最低的 14 比特位):

1 = 8-bit mu-law;
2 = CDSD per MIL-STD-188-113;
3 = ADPCM per CCITT G.721;
4 = 16-bit linear PCM;
5 = 8-bit linear PCM;
6 = Vector Quantization.

tdlType 域(16 比特位枚举值),当 Encoding Class 为 voiceraw binaryapplication-specific 时用一个枚举值指定了 TDL(Tactical Data Link - 战术数据连接)类型,或当 Encoding Class 为 database index 表示一个 TDL 消息。当没有表示 TDL 消息时此域设置为 0。

sampleRate 域(32 比特位的无符号整数)给定了 (1) Encoding Class 为 encoded audio 以每秒采样数计算的采样率或 (2) 每秒发射数据量计算的数据率。如果 Encoding Class 为 database index,则 sampleRate 设置为 0。

samples 域(16 比特位的无符号整数)给定了 Encoding Class 为 encoded voice 时的 PDU 中的采样数;否则此域设置为 0。

dataLength 域(16 比特位的无符号整数)指定了 Signal PDU 中将发送的数码语音音频或数码数据的比特位数。如果 Encoding Class 为 database index,则 dataLength 域值被设置为 96。

data 域指定了由无线电发射传输的音频或数码数据。这个域的解释依照 encodingScheme 域和 tdlType 域的值。具体细节参照 DIS 标准(2.[IEEE1278])。

whichGeometry 域指示渲染软件以何种几何体绘制 SignalPdu 节点:-1 为无几何体;0 为文本描绘;1 为此节点的缺省几何体。浏览器可支持额外的可选的几何体模式。如果缺少更高模式支持,则转回 whichGeometry 值为 1。

bboxCenter 域和 bboxSize 域(属于 X3DBoundedObject 的界面)分别指定了包含在此节点显示几何体(如果存在)的立方体边界盒的中心和尺寸。

28.3.3 ReceiverPdu

ReceiverPdu : X3DChildNode {
  SFInt32  [in]     radioID                  []    [0,65535]
  SFFloat  [in out] receivedPower            []    [0,∞)
  SFInt32  [in out] receiverState            []    [0,65535]
  SFInt32  [in]     transmitterApplicationID []    [0,65535]
  SFInt32  [in]     transmitterEntityID      []    [0,65535]
  SFInt32  [in]     transmitterRadioID       []    [0,65535]
  SFInt32  [in]     transmitterSiteID        []    [0,65535]           
  SFInt32  [in out] whichGeometry            1     [-1,∞)
  SFVec3f  [in out] bboxCenter               0 0 0    (-∞,∞)
  SFVec3f  [in out] bboxSize                 -1 -1 -1 (-∞,∞)
  SFBool   [out]    isActive
  SFTime   [out]    timestamp
  SFString [in out] networkMode      "standAlone"  ["standAlone" "networkReader" "networkWriter"]
  SFBool   [out]    isStandAlone
  SFBool   [out]    isNetworkReader
  SFBool   [out]    isNetworkWriter
  SFFloat  [in out] readInterval           0.1     [0,∞)
  SFFloat  [in out] writeInterval          1.0     [0,∞)
  SFInt32  [in out] applicationID            1     [0,65535]
  SFInt32  [in out] siteID                   0     [0,65535]
  SFInt32  [in out] entityID                 0     [0,65535]
  SFString [in out] address           "localhost"
  SFInt32  [in out] port                     0     [0,65535]
  SFString [in out] multicastRelayHost      ""
  SFInt32  [in out] multicastRelayPort       0     
  SFBool   [in out] rtpHeaderExpected     FALSE
  SFBool   [out]    isRtpHeaderHeard
}

ReceiverPdu 一个执行 X3DBoundedObject 界面的 X3DChildNode 节点。ReceiverPdu 发送射频接收机(radio frequency - RF)在演练中的状态。在 ReceiverPdu 节点中而没有在前述一般 DIS 域中描述的域有:whichGeometryradioIDreceivedPowerreceiverStatetransmitterSiteIDtransmitterApplicationIDtransmitterEntityIDtransmitterRadioID

radioID 域标识了一个给定实体(entityID)中的一个特定的无线电。radioID(16 比特位的无符号整数)被赋予从 1 开始序列化值。实体 ID(entityID)和无线电 ID(radioID)的组合在整个模拟演练中都将是唯一的。receivedPower 域(32 比特位的浮点数)指示了应用了传播衰减和天线增益后的接收到的射频的功率(RF power)。域值的单位为 dBm(分贝毫瓦 decibel-milliwatts)。receiverState(16 比特位枚举值)按以下枚举值指示了接收机当前为忙还是为空:

0 = off;(关闭)
1 = on but not receiving;(打开但不接收)
2 = on and receiving。(打并接收)

transmitterEntityID (16 比特位的无符号整数)指示了发射了信号并被接受的发射机实体。 transmitterRadioID 域(16 比特位的无符号整数)指示了发射机实体(transmitterEntityID)中特定的无线电。

transmitterSiteID 域(16 比特位的无符号整数)为发射机实体提供了一个唯一的 DIS 站(site)标识符。transmitterApplicationID(16 比特位的无符号整数)为此 DIS 站中发射机实体提供了一个唯一的应用标识符。

whichGeometry 域指示渲染软件以何种几何体绘制 ReceiverPdu 节点:-1 为无几何体;0 为文本描绘;1 为此节点的缺省几何体。浏览器可支持额外的可选的几何体模式。如果缺少更高模式支持,则转回 whichGeometry 值为 1。

bboxCenter 域和 bboxSize 域(属于 X3DBoundedObject 的界面)分别指定了包含在此节点显示几何体(如果存在)的立方体边界盒的中心和尺寸。

28.3.4 TransmitterPdu

TransmitterPdu : X3DChildNode { 
  SFInt32  [in]     radioID                                  [0,65535]
  SFInt32  [in]     radioEntityTypeKind                      [0,255]
  SFInt32  [in]     radioEntityTypeDomain                    [0,255]
  SFInt32  [in]     radioEntityTypeCountry                   [0,65535]
  SFInt32  [in]     radioEntityTypeCategory                  [0,255]
  SFInt32  [in]     radioEntityTypeNomenclature              [0,255]
  SFInt32  [in]     radioEntityTypeNomenclatureVersion       [0,65535]
  SFInt32  [in out] transmitState                            [0,255]
  SFInt32  [in]     inputSource                              [0,255]
  SFVec3f  [in out] antennaLocation              0 0 0       (-∞,∞)
  SFVec3f  [in out] relativeAntennaLocation      0 0 0       (-∞,∞)
  SFInt32  [in]     antennaPatternType                       [0,65535]
  SFInt32  [in]     antennaPatternLength                     [0,65535]
  SFInt32  [in out] frequency                                
  SFFloat  [in out] transmitFrequencyBandwidth               (-∞,∞)
  SFFloat  [in out] power                                    [0,∞)
  SFInt32  [in]     lengthOfModulationParameters             [0,255]
  SFInt32  [in]     modulationTypeSpreadSpectrum             [0,65535]
  SFInt32  [in]     modulationTypeMajor                      [0,65535]
  SFInt32  [in]     modulationTypeDetail                     [0,65535]
  SFInt32  [in]     modulationTypeSystem                     [0,65535]
  SFInt32  [in]     cryptoSystem                             [0,65535]
  SFInt32  [in]     cryptoKeyID                              [0,65535]           
  SFInt32  [in out] whichGeometry                1           [-1,∞)
  SFVec3f  [in out] bboxCenter                   0 0 0       (-∞,∞)
  SFVec3f  [in out] bboxSize                     -1 -1 -1    (-∞,∞)
  SFBool   [out]    isActive
  SFTime   [out]    timestamp
  SFString [in out] networkMode                  "standAlone"  ["standAlone" "networkReader" "networkWriter"]
  SFBool   [out]    isStandAlone
  SFBool   [out]    isNetworkReader
  SFBool   [out]    isNetworkWriter
  SFFloat  [in out] readInterval                 0.1         [0,∞)
  SFFloat  [in out] writeInterval                1.0         [0,∞)
  SFInt32  [in out] applicationID                1           [0,65535]
  SFInt32  [in out] siteID                       0           [0,65535]
  SFInt32  [in out] entityID                     0           [0,65535]
  SFString [in out] address                      "localhost"
  SFInt32  [in out] port                         0           [0,65535]
  SFString [in out] multicastRelayHost           ""
  SFInt32  [in out] multicastRelayPort           0           
  SFBool   [in out] rtpHeaderExpected            FALSE
  SFBool   [out]    isRtpHeaderHeard
}

TransmitterPdu 一个执行 X3DBoundedObject 界面的 X3DChildNode 节点。TransmitterPdu 提供了无线电发射机的详细信息。在 TransmitterPdu 节点中而没有在前述一般 DIS 域中描述的域有:radioIDradioEntityTypeKindradioEntityTypeDomainradioEntityTypeCountryradioEntityTypeCategoryradioEntityTypeNomenclatureradioEntityTypeNomenclatureVersiontransmitStateinputSourceantennaLocationantennaPatternTypeantennaPatternLengthfrequencytransmitFrequencyBandwidthpowermodulationTypeSpreadSpectrummodulationTypeMajormodulationTypeDetailmodulationTypeSystemlengthOfModulationParameterscryptoSystemcryptoKeyIDrelativeAntennaLocationwhichGeometry

radioID 域标识了一个给定实体(entityID)中的一个特定的无线电。radioID(16 比特位的无符号整数)被赋予从 1 开始序列化值。实体 ID(entityID)和无线电 ID(radioID)的组合在整个模拟演练中都将是唯一的。

无线电实体的描述由以下域的组合提供:radioEntityTypeKindradioEntityTypeDomainradioEntityTypeCountryradioEntityTypeCategoryradioEntityTypeNomenclatureVersion、and radioEntityTypeNomenclatureradioEntityTypeKind 为一个 8 比特位枚举值(例如值 7 表示 Entity Kind of "Radio")。radioEntityTypeDomain 域(8 比特位枚举值)指明无线电运作的域的枚举值:

0 = other;         (其它)  
1 = land;          (地面)   
2 = air;            (空中)    
3 = surface;      (水面)
4 = subsurface; (水下) 
5 = space。        (太空)  

radioEntityTypeCountry 域(16 比特位枚举值)指示了无线电实体设计归属的国家(见 2.[IEEE1278])。

The radioEntityTypeCategory field (8 比特位枚举值)指定了此无线电实体描述所属的主类目。radioEntityTypeNomenclature (16 比特位枚举值)指定了特定通信设备的命名(nomenclature)。命名为一个规格中的字母组合或数字序列,用以提供了短标识方法(从 MIL-STD-196D, Commercial 中衍生)。radioEntityTypeNomenclatureVersion 域指出了规格修改或设备系列和/或设备族中的个别的单位类型。

transmitterState 域(8 比特位枚举值)按以下枚举值指示了发射机当前的运作状态:

0 = off;(关闭)
1 = on but not transmitting;(打开但不发射)
2 = on and transmitting。(打并发射)

inputSource(8 比特位枚举值)用以下枚举值指定了实体初始化时提供输入音频或发射数据的位置或数据端口:

0 = other;
1 = pilot;
2 = copilot;
3 = first officer;
4 = driver;
5 = loader;
6 = gunner;
7 = commander;
8 = digital data device;
9 = intercom.

antennaLocation 域提供了发射机天线(antenna)在 DIS 坐标系中的位置。注意 DIS 规格中天线位置矢量的组件值表示为 64 比特位浮点值,用了能于 X3D 之间取得最大的互通性,这里提供的值表示为 SFVec3f。relativeAntennaLocation 域提供了一个相对发射机实体到天线的位置偏移,一般发射机设备到天线放置位置间会有一定距离。

antennaPatternType(16 比特位枚举值)指示了用以下枚举值表示的天线辐射图的类型:

0 = omni-directional;        全向 
1 = beam;                       束
2 = spherical harmonic。     球形谐波

此域的值决定 DIS Transmitter PDU 的 Antenna Pattern Parameter(天线辐射图参数)域的解释方式。antennaPatternLength 域(16 比特位的无符号整数)以八比特位组(值将为 8 的倍数)指定了 Antenna Pattern Parameters 域的长度。

frequency 域指定了用来发射无线电的中心频率(以赫兹 Hertz 为单位)。注意 DIS 规格中描述频率的值表示为 64 比特位无符号整数值,在 X3D 中将限制为 SFInt32。transmitFrequencyBandwidth (32 比特位的浮点数)指示了无线电发射实体的通频带。power 域(32 比特位的浮点数)提供了无线电实体发射的平均功率(以 dBm 为单位)。

无线电发射提供的调制方式由 Transmitter PDU 中的某些域表示。这些域提供了一个信号参数,以决定两台无线电是否能协同工作。modulationTypeSpreadSpectrum 域指示了用以下枚举值表示的展布频谱技术或结合的其它技术:

0 = frequency hopping;
1 = pseudo-noise;
2 = time hopping;
3-15 are to be determined。

modulationTypeMajor (16 比特位枚举值)用以下枚举值的提供了调制类型的主要分类:

0 = other;
1 = amplitude;
2 = amplitude and angle;
3 = angle;
4 = combination;
5 = pulse;
6 = unmodulated。

modulationTypeDetail 域(16 比特位枚举值)包括了基于 Major Modulation Type(modulationTypeMajor 主调制类型)的详细信息。modulationTypeSystem 域(16 比特位枚举值)用以下枚举值指定了 Transmitter PDU 中的调制类型参数的解释:

0 = other;
1 = generic;
2 = HQ;
3 = HQII;
4 = HQIIA;
5 = SINCGARS;
6 = CCTT SINCGARS。

cryptoSystem 域(16 比特位枚举值)按以下枚举值指示了使用的加密设备:

- (负值) = other;
1 = KY-28;
2 = KY-58;
3 = Narrow Spectrum Secure Voice (NSVE);
4 = Wide Spectrum Secure Voice (WSVE);
5 = SINCGARS ICOM。

cryptoKeyID 域(16 比特位的无符号整数)指示了加密设备是基带加密模式还是双相加密模式(此 16  比特位域的高阶比特位)以及提供了密钥标识符(低阶的 15 比特位)。如果发射的密钥标识符和接受的相匹配,则被认为使用了相同的密钥编码(注意发射的不是实际的密钥编码)。

whichGeometry 域指示渲染软件以何种几何体绘制 TransmitterPdu 节点:-1 为无几何体;0 为文本描绘;1 为此节点的缺省几何体。浏览器可支持额外的可选的几何体模式。如果缺少更高模式支持,则转回 whichGeometry 值为 1。

bboxCenter 域和 bboxSize 域(属于 X3DBoundedObject 的界面)分别指定了包含在此节点显示几何体(如果存在)的立方体边界盒的中心和尺寸。

cube 28.4 支持级别

The DIS 组件提供 表 28.2 中规定的一个支持级别。

Table 28.2 — DIS组件支持级别

级别
Level

必备条件

节点/特性 支持
1 Core 1
Time 1
Grouping 3
Networking 3
Rendering 1
Shape 1
Geometry3D 1
Interpolator 1
Point device sensor 1
Navigation 1
EspduTransform
SignalPDU
ReceiverPDU
TransmitterPDU
所有域
--- X3D separator bar --- Site Meter