changed: gcc8 base update
[opensg.git] / Source / System / Dynamics / Skeleton / OSGSkeleton.fcd
blobc70cc900e5644071b9a45479ab3114ce00c9b317
1 <?xml version="1.0"?>
3 <FieldContainer
4 name="Skeleton"
5 parent="AttachmentContainer"
6 mixinparent="SkeletonParent"
7 library="Dynamics"
8 pointerfieldtypes="both"
9 structure="concrete"
10 systemcomponent="true"
11 parentsystemcomponent="true"
12 decoratable="false"
13 childFields="both"
14 parentFields="both"
16 A Skeleton is simply one (or multiple) node hierarchies that contain some
17 SkeletonJoint cores.
18 Traversal will jump to the roots (MFRoots) of these hierarchies and traverse
19 them, updating the matrix for each joint (MFJointMatrices) in the process.
20 A Skeleton assumes exclusive ownership of its joints, but the Skeleton itself
21 may be shared.
23 <Field
24 name="roots"
25 type="Node"
26 category="pointer"
27 cardinality="multi"
28 visibility="external"
29 access="public"
31 The roots of the joint (or bone) hierarchies for the skeleton.
32 There should be Nodes with SkeletonJoint cores in the pointed-to
33 hierarchies.
34 </Field>
36 <Field
37 name="joints"
38 type="BaseSkeletonJoint"
39 category="childpointer"
40 linkParentField="Skeleton"
41 cardinality="multi"
42 visibility="external"
43 access="public"
45 The joints (or bones) of the skeleton. Sorted by their jointId.
46 READ ONLY: You should never write to this field, Skeleton scans
47 for joints whenever the set of roots is modified.
48 </Field>
50 <Field
51 name="parentJoints"
52 type="BaseSkeletonJoint"
53 category="pointer"
54 cardinality="multi"
55 visibility="internal"
56 access="public"
58 Stores the parent of each joint at the position of the childs jointId.
59 In other words parentJoints[i] is the parent of the joint with
60 jointId i (which is stored in joints[i]). If the joint has no parent
61 NULL is stored instead.
62 READ ONLY: You should never write to this field, Skeleton scans
63 for joints whenever the set of roots is modified.
64 </Field>
66 <Field
67 name="jointMatrices"
68 type="Matrix"
69 category="data"
70 cardinality="multi"
71 visibility="internal"
72 access="public"
74 Matrices for all joints of the skeleton. Elements correspond to
75 joints at the same index in _mfJoints.
76 These matrices are absolute, not relative to the parent joint.
77 READ ONLY: You should never write to this field, Skeleton updates
78 it during the RenderActions traversal.
79 </Field>
81 <Field
82 name="jointNormalMatrices"
83 type="Matrix"
84 category="data"
85 cardinality="multi"
86 visibility="internal"
87 access="public"
89 Normal matrices for all joints of the skeleton (these are the inverse
90 transpose of the jointMatrices). Elements correspond to
91 joints at the same index in _mfJoints.
92 These matrices are absolute, not relative to the parent joint.
93 READ ONLY: You should never write to this field, Skeleton updates
94 it during the RenderActions traversal.
95 </Field>
97 <Field
98 name="useInvBindMatrix"
99 type="bool"
100 category="data"
101 cardinality="single"
102 visibility="external"
103 access="public"
104 defaultValue="true"
106 Whether joints should use their SFInvBindMatrix when computing
107 the jointMatrices/jointNormalMatrices.
108 This is normally set automatically by a SkinnedGeometry as for
109 debug rendering of the bones this must be false.
110 </Field>
112 <Field
113 name="calcNormalMatrices"
114 type="bool"
115 category="data"
116 cardinality="single"
117 visibility="external"
118 access="public"
119 defaultValue="false"
121 Whether jointNormalMatrices should be calculated when computing the
122 jointMatrices.
123 </Field>
125 <Field
126 name="jointsChanged"
127 type="OSGAny"
128 category="data"
129 cardinality="single"
130 visibility="internal"
131 access="public"
133 Used by the joints to efficiently notify the Skeleton that they have been
134 modified and matrices need to be recalculated.
135 If the trees starting at 'roots' contain for example Transform cores and
136 you modify those without making changes to any SkeletonJoint cores you will
137 have to call editJointsChanged() manually once per frame to force a
138 recomputation of the joint matrices.
139 </Field>
141 </FieldContainer>