Irrlicht 3D Engine
 
Loading...
Searching...
No Matches
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
13namespace irr
14{
15namespace scene
16{
17
19 {
20 // constant does use the current key-values without interpolation
22
23 // linear interpolation
25
28 };
29
30
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
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
93
94 private:
96 friend class CSkinnedMesh;
97 bool *Moved;
98 core::vector3df StaticPos;
99 core::vector3df StaticNormal;
100 };
101
102
109
116
123
125 struct SJoint
126 {
127 SJoint() : UseAnimationFrom(0), GlobalSkinningSpace(false),
128 positionHint(-1),scaleHint(-1),rotationHint(-1)
129 {
130 }
131
134
137
140
143
146
149
152
155
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
185
188
190 virtual const core::array<SJoint*>& getAllJoints() const = 0;
191
193 virtual void finalize() = 0;
194
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
4x4 matrix. Mostly used as transformation matrix for 3d calculations.
Definition matrix4.h:46
Axis aligned bounding box in 3d dimensional space.
Definition aabbox3d.h:22
Quaternion class for representing rotations.
Definition quaternion.h:27
Interface for an animated mesh.
Interface for using some special functions of Skinned meshes.
virtual const c8 * getJointName(u32 number) const =0
Gets the name of a joint.
virtual void updateNormalsWhenAnimating(bool on)=0
Update Normals when Animating.
virtual bool useAnimationFrom(const ISkinnedMesh *mesh)=0
Use animation from another mesh.
virtual bool isStatic()=0
Check if the mesh is non-animated.
virtual core::array< SJoint * > & getAllJoints()=0
exposed for loaders: joints list
virtual void skinMesh()=0
Preforms a software skin on this mesh based of joint positions.
virtual bool setHardwareSkinning(bool on)=0
Allows to enable hardware skinning.
virtual void animateMesh(f32 frame, f32 blend)=0
Animates this mesh's joints based on frame input.
virtual SRotationKey * addRotationKey(SJoint *joint)=0
Adds a new rotation key to the mesh, access it as last one.
virtual core::array< SSkinMeshBuffer * > & getMeshBuffers()=0
exposed for loaders: to add mesh buffers
virtual u32 getJointCount() const =0
Gets joint count.
virtual void finalize()=0
loaders should call this after populating the mesh
virtual SJoint * addJoint(SJoint *parent=0)=0
Adds a new joint to the mesh, access it as last one.
virtual const core::array< SJoint * > & getAllJoints() const =0
exposed for loaders: joints list
virtual SSkinMeshBuffer * addMeshBuffer()=0
Adds a new meshbuffer to the mesh, access it as last one.
virtual SPositionKey * addPositionKey(SJoint *joint)=0
Adds a new position key to the mesh, access it as last one.
virtual SWeight * addWeight(SJoint *joint)=0
Adds a new weight to the mesh, access it as last one.
virtual s32 getJointNumber(const c8 *name) const =0
Gets a joint number from its name.
virtual SScaleKey * addScaleKey(SJoint *joint)=0
Adds a new scale key to the mesh, access it as last one.
virtual void convertMeshToTangents()=0
converts the vertex type of all meshbuffers to tangents.
virtual void setInterpolationMode(E_INTERPOLATION_MODE mode)=0
Sets Interpolation Mode.
@ EIM_COUNT
count of all available interpolation modes
Everything in the Irrlicht Engine can be found in this namespace.
Definition aabbox3d.h:13
float f32
32 bit floating point variable.
Definition irrTypes.h:104
unsigned int u32
32 bit unsigned variable.
Definition irrTypes.h:58
char c8
8 bit character variable.
Definition irrTypes.h:31
signed int s32
32 bit signed variable.
Definition irrTypes.h:66
unsigned short u16
16 bit unsigned variable.
Definition irrTypes.h:40
core::stringc Name
The name of this joint.
core::matrix4 LocalMatrix
Local matrix of this joint.
core::array< SRotationKey > RotationKeys
Animation keys causing rotation change.
core::matrix4 GlobalMatrix
Unnecessary for loaders, will be overwritten on finalize.
core::array< SPositionKey > PositionKeys
Animation keys causing translation change.
core::array< SWeight > Weights
Skin weights.
friend class CSkinnedMesh
Internal members used by CSkinnedMesh.
core::array< SScaleKey > ScaleKeys
Animation keys causing scale change.
core::array< SJoint * > Children
List of child joints.
core::array< u32 > AttachedMeshes
List of attached meshes.
Animation keyframe which describes a new position.
Animation keyframe which describes a new rotation.
Animation keyframe which describes a new scale.
f32 strength
Weight Strength/Percentage (0-1)
friend class CSkinnedMesh
Internal members used by CSkinnedMesh.
u16 buffer_id
Index of the mesh buffer.
u32 vertex_id
Index of the vertex.
A mesh buffer able to choose between S3DVertex2TCoords, S3DVertex and S3DVertexTangents at runtime.