diff options
Diffstat (limited to 'libraries/irrlicht-1.8.1/include/ISkinnedMesh.h')
-rw-r--r-- | libraries/irrlicht-1.8.1/include/ISkinnedMesh.h | 219 |
1 files changed, 0 insertions, 219 deletions
diff --git a/libraries/irrlicht-1.8.1/include/ISkinnedMesh.h b/libraries/irrlicht-1.8.1/include/ISkinnedMesh.h deleted file mode 100644 index 03f5016..0000000 --- a/libraries/irrlicht-1.8.1/include/ISkinnedMesh.h +++ /dev/null | |||
@@ -1,219 +0,0 @@ | |||
1 | // Copyright (C) 2002-2012 Nikolaus Gebhardt | ||
2 | // This file is part of the "Irrlicht Engine". | ||
3 | // For conditions of distribution and use, see copyright notice in irrlicht.h | ||
4 | |||
5 | #ifndef __I_SKINNED_MESH_H_INCLUDED__ | ||
6 | #define __I_SKINNED_MESH_H_INCLUDED__ | ||
7 | |||
8 | #include "irrArray.h" | ||
9 | #include "IBoneSceneNode.h" | ||
10 | #include "IAnimatedMesh.h" | ||
11 | #include "SSkinMeshBuffer.h" | ||
12 | |||
13 | namespace irr | ||
14 | { | ||
15 | namespace scene | ||
16 | { | ||
17 | |||
18 | enum E_INTERPOLATION_MODE | ||
19 | { | ||
20 | // constant does use the current key-values without interpolation | ||
21 | EIM_CONSTANT = 0, | ||
22 | |||
23 | // linear interpolation | ||
24 | EIM_LINEAR, | ||
25 | |||
26 | //! count of all available interpolation modes | ||
27 | EIM_COUNT | ||
28 | }; | ||
29 | |||
30 | |||
31 | //! Interface for using some special functions of Skinned meshes | ||
32 | class ISkinnedMesh : public IAnimatedMesh | ||
33 | { | ||
34 | public: | ||
35 | |||
36 | //! Gets joint count. | ||
37 | /** \return Amount of joints in the skeletal animated mesh. */ | ||
38 | virtual u32 getJointCount() const = 0; | ||
39 | |||
40 | //! Gets the name of a joint. | ||
41 | /** \param number: Zero based index of joint. The last joint | ||
42 | has the number getJointCount()-1; | ||
43 | \return Name of joint and null if an error happened. */ | ||
44 | virtual const c8* getJointName(u32 number) const = 0; | ||
45 | |||
46 | //! Gets a joint number from its name | ||
47 | /** \param name: Name of the joint. | ||
48 | \return Number of the joint or -1 if not found. */ | ||
49 | virtual s32 getJointNumber(const c8* name) const = 0; | ||
50 | |||
51 | //! Use animation from another mesh | ||
52 | /** The animation is linked (not copied) based on joint names | ||
53 | so make sure they are unique. | ||
54 | \return True if all joints in this mesh were | ||
55 | matched up (empty names will not be matched, and it's case | ||
56 | sensitive). Unmatched joints will not be animated. */ | ||
57 | virtual bool useAnimationFrom(const ISkinnedMesh *mesh) = 0; | ||
58 | |||
59 | //! Update Normals when Animating | ||
60 | /** \param on If false don't animate, which is faster. | ||
61 | Else update normals, which allows for proper lighting of | ||
62 | animated meshes. */ | ||
63 | virtual void updateNormalsWhenAnimating(bool on) = 0; | ||
64 | |||
65 | //! Sets Interpolation Mode | ||
66 | virtual void setInterpolationMode(E_INTERPOLATION_MODE mode) = 0; | ||
67 | |||
68 | //! Animates this mesh's joints based on frame input | ||
69 | virtual void animateMesh(f32 frame, f32 blend)=0; | ||
70 | |||
71 | //! Preforms a software skin on this mesh based of joint positions | ||
72 | virtual void skinMesh() = 0; | ||
73 | |||
74 | //! converts the vertex type of all meshbuffers to tangents. | ||
75 | /** E.g. used for bump mapping. */ | ||
76 | virtual void convertMeshToTangents() = 0; | ||
77 | |||
78 | //! Allows to enable hardware skinning. | ||
79 | /* This feature is not implementated in Irrlicht yet */ | ||
80 | virtual bool setHardwareSkinning(bool on) = 0; | ||
81 | |||
82 | //! A vertex weight | ||
83 | struct SWeight | ||
84 | { | ||
85 | //! Index of the mesh buffer | ||
86 | u16 buffer_id; //I doubt 32bits is needed | ||
87 | |||
88 | //! Index of the vertex | ||
89 | u32 vertex_id; //Store global ID here | ||
90 | |||
91 | //! Weight Strength/Percentage (0-1) | ||
92 | f32 strength; | ||
93 | |||
94 | private: | ||
95 | //! Internal members used by CSkinnedMesh | ||
96 | friend class CSkinnedMesh; | ||
97 | bool *Moved; | ||
98 | core::vector3df StaticPos; | ||
99 | core::vector3df StaticNormal; | ||
100 | }; | ||
101 | |||
102 | |||
103 | //! Animation keyframe which describes a new position | ||
104 | struct SPositionKey | ||
105 | { | ||
106 | f32 frame; | ||
107 | core::vector3df position; | ||
108 | }; | ||
109 | |||
110 | //! Animation keyframe which describes a new scale | ||
111 | struct SScaleKey | ||
112 | { | ||
113 | f32 frame; | ||
114 | core::vector3df scale; | ||
115 | }; | ||
116 | |||
117 | //! Animation keyframe which describes a new rotation | ||
118 | struct SRotationKey | ||
119 | { | ||
120 | f32 frame; | ||
121 | core::quaternion rotation; | ||
122 | }; | ||
123 | |||
124 | //! Joints | ||
125 | struct SJoint | ||
126 | { | ||
127 | SJoint() : UseAnimationFrom(0), GlobalSkinningSpace(false), | ||
128 | positionHint(-1),scaleHint(-1),rotationHint(-1) | ||
129 | { | ||
130 | } | ||
131 | |||
132 | //! The name of this joint | ||
133 | core::stringc Name; | ||
134 | |||
135 | //! Local matrix of this joint | ||
136 | core::matrix4 LocalMatrix; | ||
137 | |||
138 | //! List of child joints | ||
139 | core::array<SJoint*> Children; | ||
140 | |||
141 | //! List of attached meshes | ||
142 | core::array<u32> AttachedMeshes; | ||
143 | |||
144 | //! Animation keys causing translation change | ||
145 | core::array<SPositionKey> PositionKeys; | ||
146 | |||
147 | //! Animation keys causing scale change | ||
148 | core::array<SScaleKey> ScaleKeys; | ||
149 | |||
150 | //! Animation keys causing rotation change | ||
151 | core::array<SRotationKey> RotationKeys; | ||
152 | |||
153 | //! Skin weights | ||
154 | core::array<SWeight> Weights; | ||
155 | |||
156 | //! Unnecessary for loaders, will be overwritten on finalize | ||
157 | core::matrix4 GlobalMatrix; | ||
158 | core::matrix4 GlobalAnimatedMatrix; | ||
159 | core::matrix4 LocalAnimatedMatrix; | ||
160 | core::vector3df Animatedposition; | ||
161 | core::vector3df Animatedscale; | ||
162 | core::quaternion Animatedrotation; | ||
163 | |||
164 | core::matrix4 GlobalInversedMatrix; //the x format pre-calculates this | ||
165 | |||
166 | private: | ||
167 | //! Internal members used by CSkinnedMesh | ||
168 | friend class CSkinnedMesh; | ||
169 | |||
170 | SJoint *UseAnimationFrom; | ||
171 | bool GlobalSkinningSpace; | ||
172 | |||
173 | s32 positionHint; | ||
174 | s32 scaleHint; | ||
175 | s32 rotationHint; | ||
176 | }; | ||
177 | |||
178 | |||
179 | //Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_ | ||
180 | |||
181 | //these functions will use the needed arrays, set values, etc to help the loaders | ||
182 | |||
183 | //! exposed for loaders: to add mesh buffers | ||
184 | virtual core::array<SSkinMeshBuffer*>& getMeshBuffers() = 0; | ||
185 | |||
186 | //! exposed for loaders: joints list | ||
187 | virtual core::array<SJoint*>& getAllJoints() = 0; | ||
188 | |||
189 | //! exposed for loaders: joints list | ||
190 | virtual const core::array<SJoint*>& getAllJoints() const = 0; | ||
191 | |||
192 | //! loaders should call this after populating the mesh | ||
193 | virtual void finalize() = 0; | ||
194 | |||
195 | //! Adds a new meshbuffer to the mesh, access it as last one | ||
196 | virtual SSkinMeshBuffer* addMeshBuffer() = 0; | ||
197 | |||
198 | //! Adds a new joint to the mesh, access it as last one | ||
199 | virtual SJoint* addJoint(SJoint *parent=0) = 0; | ||
200 | |||
201 | //! Adds a new weight to the mesh, access it as last one | ||
202 | virtual SWeight* addWeight(SJoint *joint) = 0; | ||
203 | |||
204 | //! Adds a new position key to the mesh, access it as last one | ||
205 | virtual SPositionKey* addPositionKey(SJoint *joint) = 0; | ||
206 | //! Adds a new scale key to the mesh, access it as last one | ||
207 | virtual SScaleKey* addScaleKey(SJoint *joint) = 0; | ||
208 | //! Adds a new rotation key to the mesh, access it as last one | ||
209 | virtual SRotationKey* addRotationKey(SJoint *joint) = 0; | ||
210 | |||
211 | //! Check if the mesh is non-animated | ||
212 | virtual bool isStatic()=0; | ||
213 | }; | ||
214 | |||
215 | } // end namespace scene | ||
216 | } // end namespace irr | ||
217 | |||
218 | #endif | ||
219 | |||