Irrlicht 3D Engine
 
Loading...
Searching...
No Matches
SAnimatedMesh.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 __S_ANIMATED_MESH_H_INCLUDED__
6#define __S_ANIMATED_MESH_H_INCLUDED__
7
8#include "IAnimatedMesh.h"
9#include "IMesh.h"
10#include "aabbox3d.h"
11#include "irrArray.h"
12
13namespace irr
14{
15namespace scene
16{
17
20 {
23 {
24 #ifdef _DEBUG
25 setDebugName("SAnimatedMesh");
26 #endif
27 addMesh(mesh);
29 }
30
33 {
34 // drop meshes
35 for (u32 i=0; i<Meshes.size(); ++i)
36 Meshes[i]->drop();
37 }
38
40
41 virtual u32 getFrameCount() const
42 {
43 return Meshes.size();
44 }
45
47
48 virtual f32 getAnimationSpeed() const
49 {
50 return FramesPerSecond;
51 }
52
54
56 virtual void setAnimationSpeed(f32 fps)
57 {
59 }
60
62
69 virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1)
70 {
71 if (Meshes.empty())
72 return 0;
73
74 return Meshes[frame];
75 }
76
78 void addMesh(IMesh* mesh)
79 {
80 if (mesh)
81 {
82 mesh->grab();
83 Meshes.push_back(mesh);
84 }
85 }
86
88
89 virtual const core::aabbox3d<f32>& getBoundingBox() const
90 {
91 return Box;
92 }
93
95 virtual void setBoundingBox(const core::aabbox3df& box)
96 {
97 Box = box;
98 }
99
102 {
103 Box.reset(0,0,0);
104
105 if (Meshes.empty())
106 return;
107
108 Box = Meshes[0]->getBoundingBox();
109
110 for (u32 i=1; i<Meshes.size(); ++i)
111 Box.addInternalBox(Meshes[i]->getBoundingBox());
112 }
113
116 {
117 return Type;
118 }
119
121 virtual u32 getMeshBufferCount() const
122 {
123 if (Meshes.empty())
124 return 0;
125
126 return Meshes[0]->getMeshBufferCount();
127 }
128
130 virtual IMeshBuffer* getMeshBuffer(u32 nr) const
131 {
132 if (Meshes.empty())
133 return 0;
134
135 return Meshes[0]->getMeshBuffer(nr);
136 }
137
139
142 virtual IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const
143 {
144 if (Meshes.empty())
145 return 0;
146
147 return Meshes[0]->getMeshBuffer(material);
148 }
149
151 virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue)
152 {
153 for (u32 i=0; i<Meshes.size(); ++i)
154 Meshes[i]->setMaterialFlag(flag, newvalue);
155 }
156
159 {
160 for (u32 i=0; i<Meshes.size(); ++i)
161 Meshes[i]->setHardwareMappingHint(newMappingHint, buffer);
162 }
163
166 {
167 for (u32 i=0; i<Meshes.size(); ++i)
168 Meshes[i]->setDirty(buffer);
169 }
170
173
176
179
182 };
183
184
185} // end namespace scene
186} // end namespace irr
187
188#endif
189
bool drop() const
Drops the object. Decrements the reference counter by one.
void grab() const
Grabs the object. Increments the reference counter by one.
void setDebugName(const c8 *newName)
Sets the debug name of the object.
Axis aligned bounding box in 3d dimensional space.
Definition aabbox3d.h:22
void addInternalBox(const aabbox3d< T > &b)
Adds another bounding box.
Definition aabbox3d.h:82
void reset(T x, T y, T z)
Resets the bounding box to a one-point box.
Definition aabbox3d.h:50
Interface for an animated mesh.
Struct for holding a mesh with a single material.
Definition IMeshBuffer.h:40
Class which holds the geometry of an object.
Definition IMesh.h:24
Struct for holding parameters for a material renderer.
Definition SMaterial.h:227
E_ANIMATED_MESH_TYPE
Possible types of (animated) meshes.
@ EAMT_UNKNOWN
Unknown animated mesh type.
@ EBT_VERTEX_AND_INDEX
Change both vertex and index mapping to the same value.
E_MATERIAL_FLAG
Material flags.
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
signed int s32
32 bit signed variable.
Definition irrTypes.h:66
Simple implementation of the IAnimatedMesh interface.
E_ANIMATED_MESH_TYPE Type
The type of the mesh.
virtual u32 getMeshBufferCount() const
returns amount of mesh buffers.
virtual IMesh * getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1)
Returns the IMesh interface for a frame.
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX)
flags the meshbuffer as changed, reloads hardware buffers
virtual E_ANIMATED_MESH_TYPE getMeshType() const
Returns the type of the animated mesh.
void addMesh(IMesh *mesh)
adds a Mesh
virtual u32 getFrameCount() const
Gets the frame count of the animated mesh.
virtual ~SAnimatedMesh()
destructor
virtual const core::aabbox3d< f32 > & getBoundingBox() const
Returns an axis aligned bounding box of the mesh.
virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX)
set the hardware mapping hint, for driver
void recalculateBoundingBox()
Recalculates the bounding box.
virtual IMeshBuffer * getMeshBuffer(u32 nr) const
returns pointer to a mesh buffer
SAnimatedMesh(scene::IMesh *mesh=0, scene::E_ANIMATED_MESH_TYPE type=scene::EAMT_UNKNOWN)
constructor
virtual f32 getAnimationSpeed() const
Gets the default animation speed of the animated mesh.
virtual IMeshBuffer * getMeshBuffer(const video::SMaterial &material) const
Returns pointer to a mesh buffer which fits a material.
virtual void setBoundingBox(const core::aabbox3df &box)
set user axis aligned bounding box
core::aabbox3d< f32 > Box
The bounding box of this mesh.
core::array< IMesh * > Meshes
All meshes defining the animated mesh.
virtual void setAnimationSpeed(f32 fps)
Gets the frame count of the animated mesh.
f32 FramesPerSecond
Default animation speed of this mesh.
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue)
Set a material flag for all meshbuffers of this mesh.