Extensible 3D (X3D)
Part 1: Architecture and base components
26 Humanoid Animation (H-Anim) component
人性化动画组件
这部分组件的名称是 “HAnim”。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。
本条款描述了 ISO/IEC 19775 标准这部分中的 Humanoid Animation (H-Anim) component (人性化动画组件)。表 26.1 列出了这一条款的主要主题。X3D 的 H-Anim 组件定义了在 X3D 中执行 H-Anim 标准(参见 2.[I19774])的绑定节点和其它规格。
这个组件映射 2.[I19774] 中功能性的定义到一系列的 X3D 节点。这些节点的语法在 2.[I19774] 中指定。
HAnimDisplacer : X3DGeometricPropertyNode { MFInt32 [in,out] coordIndex [] [0,∞) or -1 MFVec3f [in,out] displacements [] [X3DCoordinateNode] SFString [in,out] name "" }
应用程序可能需要改变单独的 Segment 段的形状,在大多数的基本层中,这是通过向 HAnimSegment 节点 coord 域中的 X3DCoordinateNode 衍生节点的 point 域写入数据来完成的。
在某些情况下,应用程序可能需要识别 HAnimSegment 中指定的顶点组。例如,应用程序可能需要知道头骨 HAnimSegment 段中的那些节点包含左眼球。也可能需要每个节点移动方向的“提示”。这些信息被存储在称为 HAnimDisplacer 的节点中。特定的 HAnimSegment 的 HAnimDisplacers 存储在这个 HAnimSegment 的 displacers 域中。
每个域的描述在 2.[I19774] 中。
HAnimHumanoid : X3DChildNode { SFVec3f [in,out] center 0 0 0 (-∞,∞) MFNode [in,out] humanoidBody [] [HumanoidRoot] MFString [in,out] info [] MFNode [in,out] joints [] [HAnimJoint] SFString [in,out] name "" SFRotation [in,out] rotation 0 0 1 0 (-∞,∞)|[-1,1] SFVec3f [in,out] scale 1 1 1 (0,∞) SFRotation [in,out] scaleOrientation 0 0 1 0 (-∞,∞)|[-1,1] MFNode [in,out] segments [] [HAnimSegment] MFNode [in,out] sites [] [HAnimSite] MFNode [in,out] skeleton [] [HAnimJoint] MFNode [in,out] skin [] [IndexedFaceSet] SFNode [in,out] skinCoord NULL [X3DCoordinateNode] SFNode [in,out] skinNormal NULL [X3DNormalNode] SFVec3f [in,out] translation 0 0 0 (-∞,∞) SFString [in,out] version "" MFNode [in,out] viewpoints [] [Viewpoint] SFVec3f [] bboxCenter 0 0 0 (-∞,∞) SFVec3f [] bboxSize -1 -1 -1 (0,∞)|[-1 -1 -1] }
HAnimHumanoid 节点作为整个人性化对象的容器,用来存储涉及的 HAnimJoint、HAnimSegment、Viewpoint 节点,除此之外还诸如作者和版权信息之类的可读信息。它还提供简便的在环境中移动人性化对象的方法。
每个域的描述在 2.[I19774] 中。
HAnimJoint : X3DGroupingNode { MFNode [in] addChildren [HAnimJoint,HAnimSegment,HAnimSite] MFNode [in] removeChildren [HAnimJoint,HAnimSegment,HAnimSite] SFVec3f [in,out] center 0 0 0 (-∞,∞) MFNode [in,out] children [] [HAnimJoint,HAnimSegment,HAnimSite] SFRotation [in,out] limitOrientation 0 0 1 0 (-∞,∞)|[-1,1] MFFloat [in,out] llimit [] (-∞,∞) SFString [in,out] name "" SFRotation [in,out] rotation 0 0 1 0 (-∞,∞)|[-1,1] SFVec3f [in,out] scale 1 1 1 (0,∞) SFRotation [in,out] scaleOrientation 0 0 1 0 (-∞,∞)|[-1,1] MFInt32 [in,out] skinCoordIndex [] MFFloat [in,out] skinCoordWeight [] MFFloat [in,out] stiffness [0 0 0] [0,1] SFVec3f [in,out] translation 0 0 0 (-∞,∞) MFFloat [in,out] ulimit [] (-∞,∞) SFVec3f [] bboxCenter 0 0 0 (-∞,∞) SFVec3f [] bboxSize -1 -1 -1 (0,∞)|[-1 -1 -1] }
身体中的每个关节由一个 HAnimJoint 节点表现,HAnimJoint 节点用来定义身体每一段和其相连的父一层的关系。
一个 HAnimJoint 可能只是另一个 HAnimJoint 节点的子节点或n在用 HAnimJoint 节点作为人性化对象的根节点的情况下为其中 skeleton 域的子节点(例如一个 HAnimJoint 可能不是一个 HAnimSegment 的子节点)。
HAnimJoint 节点也被用来存储其它关节特有的信息。特别是提供了关节名 name 以使应用程序在运行时能识别每个 HAnimJoint 节点。HAnimJoint 节点可能包括 IK 反向动力学系统计算和控制 H-Anim 的提示。这些提示可能包括关节的上下限,关节的旋转限制,刚度/阻尼值。注意这些限制并不要求在人性化场景图中用某个机制来强制实行,其目的只在于提供信息。是否使用这些信息或是否强制限制关节的应用取决于应用程序。
人性化对象的创作及其工具并不受限于 HAnimJoint 节点的执行模式,但是作者和工具可以选择执行模式。能选择使用特殊的单一多边形网格来描述一个人性化对象,而不是用分开的单个的 IndexedFaceSet 来描述每一个身体段。这种情况下,HAnimJoint 将描述对应特定身体段及其下一层部分顶点的移动。
每个域的描述在 2.[I19774] 中。
HAnimSegment : X3DGroupingNode { MFNode [in] addChildren [X3DChildNode] MFNode [in] removeChildren [X3DChildNode] SFVec3f [in,out] centerOfMass 0 0 0 (-∞,∞) MFNode [in,out] children [] [X3DChildNode] SFNode [in,out] coord NULL [X3DCoordinateNode] MFNode [in,out] displacers [] [HAnimDisplacer] SFFloat [in,out] mass 0 (0,∞) MFFloat [in,out] momentsOfInertia [0 0 0 0 0 0 0 0 0] [0,∞) SFString [in,out] name "" SFVec3f [] bboxCenter 0 0 0 (-∞,∞) SFVec3f [] bboxSize -1 -1 -1 (0,∞) | -1 -1 -1 }
每个身体段都被存储在一个相应的 HAnimSegment 节点中。HAnimSegment 节点是一个组节点,一般包括一系列的 Shape 节点,也可能是包括按照 ISO/IEC 19774(参见 2.[I19774])中定义的坐标系中的身体位置相关的 Transform 节点。HAnimSegment 的几何体比较复杂时,推荐使用 LOD 节点。
每个域的描述在 2.[I19774] 中。
HAnimSite : X3DGroupingNode { MFNode [in] addChildren [X3DChildNode] MFNode [in] removeChildren [X3DChildNode] SFVec3f [in,out] center 0 0 0 (-∞,∞) MFNode [in,out] children [] [X3DChildNode] SFString [in,out] name "" SFRotation [in,out] rotation 0 0 1 0 (-∞,∞)|[-1,1] SFVec3f [in,out] scale 1 1 1 (0,∞) SFRotation [in,out] scaleOrientation 0 0 1 0 (-∞,∞)|[-1,1] SFVec3f [in,out] translation 0 0 0 (-∞,∞)|[-1,1] SFVec3f [] bboxCenter 0 0 0 (-∞,∞) SFVec3f [] bboxSize -1 -1 -1 (0,∞)|[-1 -1 -1] }
HAnimSite 节点服务于以下三个目标。第一是定义一个 IK 反向动力学系统使用的“最终受动器(end effector)”的位置。第二是定义首饰或服装之类的附件的附着点。第三是定义 HAnimSegment 参考系中的虚拟摄像机位置 (比如 在多用户环境中使用的人性化替身的眼睛(“through the eyes”)视点)。
每个域的描述在 2.[I19774] 中。
H-Anim 组件提供了 表 26.3 中规定的一个支持级别(levels)。
表 26.3 — Humanoid animation (H-Anim) 组件支持级别
级别 Level | 必备条件 | 节点 | 支持 |
---|---|---|---|
1 | Core 1; Grouping 1; Geometry 2; Geometric properties 1; Texturing 1; Navigation 2. |
||
HAnimDisplacer | 所有域 | ||
HAnimHumanoid | 所有域 | ||
HAnimJoint | 所有域 | ||
HAnimSegment | 所有域 | ||
HAnimSite | 所有域 |
翻译 m17 保留版权 如需转载请联系 http://m17design.myetang.com/x3d/