<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
<X3D profile='Immersive'  version='3.3 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' https://www.web3d.org/specifications/x3d-3.3.xsd ' >
<head>
<!-- Originally these fundamental prototypes were defined in InterchangableActorsViaDynamicRoutingPrototypes.x3d -->
<meta name='titlecontent=' HAnimPrototypes.x3d '/>
<meta name='descriptioncontent='Example implementation of X3D Humanoid Animation (HAnim) nodes using X3D prototypes.'/>
<meta name=' warning content=' These are developmental examples that can assist X3D player implementations and support interoperability. They are not intended for author use in regular X3D scenes. '/>
<meta name=' warning content=' Developer note: names for these HAnim Prototypes need to be corrected if used internally in an X3D player implementation (e.g. Joint to HAnimJoint). '/>
<meta name=' warning content=' Need support for skin '/>
<meta name='creatorcontent='Ozan APAYDIN, Don Brutzman'/>
<meta name='translatorcontent='Ozan APAYDIN, Don Brutzman'/>
<meta name='createdcontent='15 November 2001'/>
<meta name='modifiedcontent='23 May 2020'/>
<meta name=' TODO content=' upgrade to match support requirements for HAnim 2.2 '/>
<meta name='referencecontent=' https://www.web3d.org/files/specifications/19774/V1.0/HAnim/HAnim.html '/>
<meta name='referencecontent=' https://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/hanim.html '/>
<meta name='referencecontent=' http://HAnim.org/Models/HAnim2001/boxman/boxman.wrl '/>
<meta name='referencecontent=' http://HAnim.org/Specifications/HAnim2001 '/>
<meta name='referencecontent=' http://www.HAnim.org '/>
<meta name='referencecontent=' http://HAnim.org/Models '/>
<meta name='referencecontent=' http://HAnim.org/Specifications '/>
<meta name='referencecontent=' InterchangableActorsViaDynamicRoutingPrototypes.x3d '/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/HAnimPrototypes.x3d '/>
<meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<!-- **********Human Model Protypes********* -->
<ProtoDeclare name='Humanoid1_1appinfo='The Humanoid node serves as overall container for the Joint Segment Site and Viewpoint nodes which define the skeleton geometry and landmarks of the humanoid figure. Additionally the node provides a means for defining information about the author copyright and usage restrictions of the model.'  documentation=' http://HAnim.org/Specifications/HAnim2001/part1/Humanoid.html ' >
<ProtoInterface>
<!-- HAnim v1.1 field definitions -->
<field name='nametype='SFStringaccessType='inputOutput'/>
<field name='versiontype='SFStringvalue='1.1accessType='inputOutput'
 appinfo='legal values: 1.1 or 2.0' />

<field name='humanoidVersiontype='SFStringaccessType='inputOutput'
 appinfo='Version of the humanoid being modeled. Hint: HAnim version 2.0' />

<field name='infotype='MFStringaccessType='inputOutput'/>
<field name='translationtype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='rotationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='centertype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='scaletype='SFVec3fvalue='1 1 1accessType='inputOutput'/>
<field name='scaleOrientationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'/>
<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'/>
<field name='humanoidBodytype='MFNodeaccessType='inputOutput'
 appinfo='HAnim 1.1 field container for body head. Hint: replaced by 2.0 skeleton.'
 documentation=' http://HAnim.org/Specifications/HAnim1.1/#humanoid ' />

<field name='skeletontype='MFNodeaccessType='inputOutput'
 appinfo='HAnim 2.0 field container for body geometry Hint: replaces 1.1 humanoidBody'
 documentation=' http://HAnim.org/Specifications/HAnim2001/part1/Humanoid.html ' />

<field name='jointstype='MFNodeaccessType='inputOutput'
 appinfo='Container field for Joint nodes' />

<field name='segmentstype='MFNodeaccessType='inputOutput'
 appinfo='Container field for Segment nodes' />

<field name='sitestype='MFNodeaccessType='inputOutput'
 appinfo='Container field for Site nodes' />

<field name='viewpointstype='MFNodeaccessType='inputOutput'
 appinfo='Container field for Viewpoint nodes' />

<field name='skinCoordtype='SFNodeaccessType='inputOutput'
 appinfo='Hint: HAnim version 2.0' >
<!-- NULL -->
</field>
<field name='skinNormaltype='SFNodeaccessType='inputOutput'
 appinfo='Hint: HAnim version 2.0' >
<!-- NULL -->
</field>
</ProtoInterface>
<ProtoBody>
<Transform DEF='HumanoidTransform'>
<IS>
<connect nodeField='translationprotoField='translation'/>
<connect nodeField='rotationprotoField='rotation'/>
<connect nodeField='centerprotoField='center'/>
<connect nodeField='scaleprotoField='scale'/>
<connect nodeField='scaleOrientationprotoField='scaleOrientation'/>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
</IS>
<Group DEF='HumanoidGroup1'>
<IS>
<connect nodeField='childrenprotoField='humanoidBody'/>
</IS>
</Group>
<Group DEF='HumanoidGroup2'>
<IS>
<connect nodeField='childrenprotoField='skeleton'/>
</IS>
</Group>
<Group DEF='HumanoidGroup3'>
<IS>
<connect nodeField='childrenprotoField='viewpoints'/>
</IS>
</Group>
</Transform>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='Jointappinfo='The Joint node is used as a building block to describe the articulations of the humanoid figure. Each articulation of the humanoid figure is represented by a Joint node each of which is organized into a hierarchy that describes the overall skeleton of the humanoid.'  documentation=' http://HAnim.org/Specifications/HAnim2001/part1/Joint.html ' >
<ProtoInterface>
<field name='nametype='SFStringaccessType='inputOutput'/>
<field name='ulimittype='MFFloataccessType='inputOutput'/>
<field name='llimittype='MFFloataccessType='inputOutput'/>
<field name='limitOrientationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='skinCoordIndextype='MFInt32accessType='inputOutput'/>
<field name='skinCoordWeighttype='MFFloataccessType='inputOutput'/>
<field name='stiffnesstype='MFFloatvalue='0 0 0accessType='inputOutput'/>
<field name='translationtype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='rotationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='scaletype='SFVec3fvalue='1 1 1accessType='inputOutput'/>
<field name='scaleOrientationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='centertype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'/>
<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'/>
<field name='childrentype='MFNodeaccessType='inputOutput'/>
<field name='addChildrentype='MFNodeaccessType='inputOnly'/>
<field name='removeChildrentype='MFNodeaccessType='inputOnly'/>
</ProtoInterface>
<ProtoBody>
<Transform DEF='JointTransform'>
<IS>
<connect nodeField='translationprotoField='translation'/>
<connect nodeField='rotationprotoField='rotation'/>
<connect nodeField='centerprotoField='center'/>
<connect nodeField='scaleprotoField='scale'/>
<connect nodeField='scaleOrientationprotoField='scaleOrientation'/>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
<connect nodeField='childrenprotoField='children'/>
<connect nodeField='addChildrenprotoField='addChildren'/>
<connect nodeField='removeChildrenprotoField='removeChildren'/>
</IS>
</Transform>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='Segmentappinfo='The Segment node is used describe the attributes of the physical links between the joints of the humanoid figure. Each body part (pelvis thigh calf etc.) of the humanoid figure is represented by a Segment node.'  documentation=' http://HAnim.org/Specifications/HAnim2001/part1/Segment.html ' >
<ProtoInterface>
<field name='nametype='SFStringaccessType='inputOutput'/>
<field name='masstype='SFFloatvalue='0accessType='inputOutput'/>
<field name='centerOfMasstype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='momentsOfInertiatype='MFFloatvalue='0 0 0 0 0 0 0 0 0accessType='inputOutput'/>
<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'/>
<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'/>
<field name='childrentype='MFNodeaccessType='inputOutput'/>
<field name='addChildrentype='MFNodeaccessType='inputOnly'/>
<field name='removeChildrentype='MFNodeaccessType='inputOnly'/>
<field name='coordtype='SFNodeaccessType='inputOutput'
 appinfo='contains Coordinate nodes' >
<!-- NULL -->
</field>
<field name='displacerstype='MFNodeaccessType='inputOutput'
 appinfo='contains Displacer nodes' />
</ProtoInterface>
<ProtoBody>
<Group DEF='SegmentGroup'>
<IS>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
<connect nodeField='childrenprotoField='children'/>
<connect nodeField='addChildrenprotoField='addChildren'/>
<connect nodeField='removeChildrenprotoField='removeChildren'/>
</IS>
</Group>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='Siteappinfo='The Site node can be used for three purposes: (a) to define an "end effector" location which can be used by an inverse kinematics system (b) to define an attachment point for accessories such as jewelry and clothing and (c) to define a location for a virtual camera in the reference frame of a Segment node (such as a view "through the eyes" of the humanoid for use in multi-user worlds).'  documentation=' http://HAnim.org/Specifications/HAnim2001/part1/Site.html ' >
<ProtoInterface>
<field name='nametype='SFStringaccessType='inputOutput'/>
<field name='translationtype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='rotationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='scaletype='SFVec3fvalue='1 1 1accessType='inputOutput'/>
<field name='scaleOrientationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='centertype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'/>
<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'/>
<field name='childrentype='MFNodeaccessType='inputOutput'/>
<field name='addChildrentype='MFNodeaccessType='inputOnly'/>
<field name='removeChildrentype='MFNodeaccessType='inputOnly'/>
</ProtoInterface>
<ProtoBody>
<Transform DEF='SiteTransform'>
<IS>
<connect nodeField='translationprotoField='translation'/>
<connect nodeField='rotationprotoField='rotation'/>
<connect nodeField='centerprotoField='center'/>
<connect nodeField='scaleprotoField='scale'/>
<connect nodeField='scaleOrientationprotoField='scaleOrientation'/>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
<connect nodeField='childrenprotoField='children'/>
<connect nodeField='addChildrenprotoField='addChildren'/>
<connect nodeField='removeChildrenprotoField='removeChildren'/>
</IS>
</Transform>
</ProtoBody>
</ProtoDeclare>
<ProtoDeclare name='Displacerappinfo='A Displacer can be used in three different ways: (a) identify the vertices corresponding to a particular feature on a Segment (b) represent a particular muscular action which displaces the vertices in various directions (linearly or radially) and (c) represent a complete configuration of the vertices in a Segment.'  documentation=' http://HAnim.org/Specifications/HAnim2001/part1/Displacer.html ' >
<ProtoInterface>
<field name='nametype='SFStringaccessType='inputOutput'/>
<field name='coordIndextype='MFInt32accessType='inputOutput'/>
<field name='displacementstype='MFVec3faccessType='inputOutput'/>
</ProtoInterface>
<ProtoBody>
<WorldInfo info='"null body node"'/>
</ProtoBody>
</ProtoDeclare>
<Shape>
<Text string='"Humanoid Animation" "(HAnim) prototype" "implementations"'>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</Text>
<Appearance>
<Material ambientIntensity='0.25diffuseColor='0.795918 0.505869 0.093315shininess='0.39specularColor='0.923469 0.428866 0.006369'>
<!-- Universal Media Library: Autumn 9 -->
</Material>
</Appearance>
</Shape>
</Scene>
</X3D>
<!--

to top <!-- Index for DEF nodes: HumanoidGroup1, HumanoidGroup2, HumanoidGroup3, HumanoidTransform, JointTransform, SegmentGroup, SiteTransform

Index for ProtoDeclare definitions: Displacer, Humanoid1_1, Joint, Segment, Site
-->
-->

<!-- Online at
https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/HAnimPrototypesIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/HAnimPrototypes.x3d -->

<!-- Color legend: X3D terminology <X3dNode DEF='idName' field='value'/> matches XML terminology <XmlElement DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
    <ProtoDeclare name='ProtoName'> <field name='fieldName'/> </ProtoDeclare> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->