Irrlicht 3D Engine
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
ISkinnedMesh.h
Go to the documentation of this file.
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
27
EIM_COUNT
28
};
29
30
32
class
ISkinnedMesh
:
public
IAnimatedMesh
33
{
34
public
:
35
37
38
virtual
u32
getJointCount
()
const
= 0;
39
41
44
virtual
const
c8
*
getJointName
(
u32
number)
const
= 0;
45
47
49
virtual
s32
getJointNumber
(
const
c8
* name)
const
= 0;
50
52
57
virtual
bool
useAnimationFrom
(
const
ISkinnedMesh
*mesh) = 0;
58
60
63
virtual
void
updateNormalsWhenAnimating
(
bool
on) = 0;
64
66
virtual
void
setInterpolationMode
(
E_INTERPOLATION_MODE
mode) = 0;
67
69
virtual
void
animateMesh
(
f32
frame,
f32
blend)=0;
70
72
virtual
void
skinMesh
() = 0;
73
75
76
virtual
void
convertMeshToTangents
() = 0;
77
79
/* This feature is not implementated in Irrlicht yet */
80
virtual
bool
setHardwareSkinning
(
bool
on) = 0;
81
83
struct
SWeight
84
{
86
u16
buffer_id
;
//I doubt 32bits is needed
87
89
u32
vertex_id
;
//Store global ID here
90
92
f32
strength
;
93
94
private
:
96
friend
class
CSkinnedMesh
;
97
bool
*Moved;
98
core::vector3df
StaticPos;
99
core::vector3df
StaticNormal;
100
};
101
102
104
struct
SPositionKey
105
{
106
f32
frame
;
107
core::vector3df
position
;
108
};
109
111
struct
SScaleKey
112
{
113
f32
frame
;
114
core::vector3df
scale
;
115
};
116
118
struct
SRotationKey
119
{
120
f32
frame
;
121
core::quaternion
rotation
;
122
};
123
125
struct
SJoint
126
{
127
SJoint
() : UseAnimationFrom(0), GlobalSkinningSpace(false),
128
positionHint(-1),scaleHint(-1),rotationHint(-1)
129
{
130
}
131
133
core::stringc
Name
;
134
136
core::matrix4
LocalMatrix
;
137
139
core::array<SJoint*>
Children
;
140
142
core::array<u32>
AttachedMeshes
;
143
145
core::array<SPositionKey>
PositionKeys
;
146
148
core::array<SScaleKey>
ScaleKeys
;
149
151
core::array<SRotationKey>
RotationKeys
;
152
154
core::array<SWeight>
Weights
;
155
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
:
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
184
virtual
core::array<SSkinMeshBuffer*>
&
getMeshBuffers
() = 0;
185
187
virtual
core::array<SJoint*>
&
getAllJoints
() = 0;
188
190
virtual
const
core::array<SJoint*>
&
getAllJoints
()
const
= 0;
191
193
virtual
void
finalize
() = 0;
194
196
virtual
SSkinMeshBuffer
*
addMeshBuffer
() = 0;
197
199
virtual
SJoint
*
addJoint
(
SJoint
*parent=0) = 0;
200
202
virtual
SWeight
*
addWeight
(
SJoint
*joint) = 0;
203
205
virtual
SPositionKey
*
addPositionKey
(
SJoint
*joint) = 0;
207
virtual
SScaleKey
*
addScaleKey
(
SJoint
*joint) = 0;
209
virtual
SRotationKey
*
addRotationKey
(
SJoint
*joint) = 0;
210
212
virtual
bool
isStatic
()=0;
213
};
214
215
}
// end namespace scene
216
}
// end namespace irr
217
218
#endif
219
Irrlicht Engine
Documentation © 2003-2012 by Nikolaus Gebhardt. Generated on Sat Apr 20 2019 06:56:49 for Irrlicht 3D Engine by
Doxygen
1.8.1.2