OGRE  1.9
Object-Oriented Graphics Rendering Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
OgreEntity.h
Go to the documentation of this file.
1 /*
2 -----------------------------------------------------------------------------
3 This source file is part of OGRE
4 (Object-oriented Graphics Rendering Engine)
5 For the latest info, see http://www.ogre3d.org
6 
7 Copyright (c) 2000-2014 Torus Knot Software Ltd
8 
9 Permission is hereby granted, free of charge, to any person obtaining a copy
10 of this software and associated documentation files (the "Software"), to deal
11 in the Software without restriction, including without limitation the rights
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 copies of the Software, and to permit persons to whom the Software is
14 furnished to do so, subject to the following conditions:
15 
16 The above copyright notice and this permission notice shall be included in
17 all copies or substantial portions of the Software.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 THE SOFTWARE.
26 -----------------------------------------------------------------------------
27 */
28 #ifndef __Entity_H__
29 #define __Entity_H__
30 
31 #include "OgrePrerequisites.h"
32 #include "OgreCommon.h"
33 
34 #include "OgreString.h"
35 #include "OgreMovableObject.h"
36 #include "OgreQuaternion.h"
37 #include "OgreVector3.h"
39 #include "OgreMesh.h"
40 #include "OgreRenderable.h"
42 #include "OgreHeaderPrefix.h"
43 
44 namespace Ogre {
83  {
84  // Allow EntityFactory full access
85  friend class EntityFactory;
86  friend class SubEntity;
87  public:
88 
91 
92  protected:
93 
96  Entity();
99  Entity( const String& name, const MeshPtr& mesh);
100 
104 
109 
110 
113 
114 
131 
135  const VertexData* findBlendedVertexData(const VertexData* orig);
139  SubEntity* findSubEntityForVertexData(const VertexData* orig);
140 
144  void extractTempBufferInfo(VertexData* sourceData, TempBlendedBufferInfo* info);
146  VertexData* cloneVertexDataRemoveBlendInfo(const VertexData* source);
148  void prepareTempBlendBuffers(void);
151  void markBuffersUnusedForAnimation(void);
155  void restoreBuffersForUnusedAnimation(bool hardwareAnimation);
156 
164  void bindMissingHardwarePoseBuffers(const VertexData* srcData,
165  VertexData* destData);
166 
170  void initialisePoseVertexData(const VertexData* srcData, VertexData* destData,
171  bool animateNormals);
172 
176  void finalisePoseNormals(const VertexData* srcData, VertexData* destData);
177 
182  unsigned short mNumBoneMatrices;
185 
187  void updateAnimation(void);
188 
192  unsigned long *mFrameBonesLastUpdated;
193 
199 
204  bool cacheBoneMatrices(void);
205 
212 
215 
228 
229 
232 
239 
248 
256 
260 
263 
266 
269 
271  void buildSubEntityList(MeshPtr& mesh, SubEntityList* sublist);
272 
274  void attachObjectImpl(MovableObject *pMovable, TagPoint *pAttachingPoint);
275 
277  void detachObjectImpl(MovableObject* pObject);
278 
280  void detachAllObjectsImpl(void);
281 
283  void reevaluateVertexProcessing(void);
284 
291  bool calcVertexProcessing(void);
292 
294  void applyVertexAnimation(bool hardwareAnimation, bool stencilShadows);
296  ushort initHardwareAnimationElements(VertexData* vdata, ushort numberOfElements, bool animateNormals);
298  bool tempVertexAnimBuffersBound(void) const;
300  bool tempSkelAnimBuffersBound(bool requestNormals) const;
301 
302  public:
305  protected:
307 
308 
311 
313 
316  {
317  protected:
329 
330 
331  public:
333  HardwareIndexBufferSharedPtr* indexBuffer, const VertexData* vertexData,
334  bool createSeparateLightCap, SubEntity* subent, bool isLightCap = false);
336 
338  void _createSeparateLightCap();
340  void getWorldTransforms(Matrix4* xform) const;
341  HardwareVertexBufferSharedPtr getPositionBuffer(void) { return mPositionBuffer; }
342  HardwareVertexBufferSharedPtr getWBuffer(void) { return mWBuffer; }
344  void rebindPositionBuffer(const VertexData* vertexData, bool force);
346  bool isVisible(void) const;
348  virtual void rebindIndexBuffer(const HardwareIndexBufferSharedPtr& indexBuffer);
349  };
350  public:
353  ~Entity();
354 
357  const MeshPtr& getMesh(void) const;
358 
361  SubEntity* getSubEntity(unsigned int index) const;
362 
367  SubEntity* getSubEntity( const String& name ) const;
368 
371  unsigned int getNumSubEntities(void) const;
372 
382  Entity* clone( const String& newName ) const;
383 
392  void setMaterialName( const String& name, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME );
393 
394 
403  void setMaterial(const MaterialPtr& material);
404 
407  void _notifyCurrentCamera(Camera* cam);
408 
410  void setRenderQueueGroup(uint8 queueID);
411 
413  void setRenderQueueGroupAndPriority(uint8 queueID, ushort priority);
414 
417  const AxisAlignedBox& getBoundingBox(void) const;
418 
420  AxisAlignedBox getChildObjectsBoundingBox(void) const;
421 
424  void _updateRenderQueue(RenderQueue* queue);
425 
427  const String& getMovableType(void) const;
428 
435  AnimationState* getAnimationState(const String& name) const;
437  bool hasAnimationState(const String& name) const;
447  AnimationStateSet* getAllAnimationStates(void) const;
448 
451  void setDisplaySkeleton(bool display);
452 
455  bool getDisplaySkeleton(void) const;
456 
457 
463  Entity* getManualLodLevel(size_t index) const;
464 
470  size_t getNumManualLodLevels(void) const;
471 
474  ushort getCurrentLodIndex() { return mMeshLodIndex; }
475 
505  void setMeshLodBias(Real factor, ushort maxDetailIndex = 0, ushort minDetailIndex = 99);
506 
536  void setMaterialLodBias(Real factor, ushort maxDetailIndex = 0, ushort minDetailIndex = 99);
537 
541  void setPolygonModeOverrideable(bool PolygonModeOverrideable);
561  TagPoint* attachObjectToBone(const String &boneName,
562  MovableObject *pMovable,
563  const Quaternion &offsetOrientation = Quaternion::IDENTITY,
564  const Vector3 &offsetPosition = Vector3::ZERO);
565 
571  MovableObject* detachObjectFromBone(const String &movableName);
572 
579  void detachObjectFromBone(MovableObject* obj);
580 
582  void detachAllObjectsFromBone(void);
583 
586  ChildObjectListIterator getAttachedObjectIterator(void);
588  Real getBoundingRadius(void) const;
589 
591  const AxisAlignedBox& getWorldBoundingBox(bool derive = false) const;
593  const Sphere& getWorldBoundingSphere(bool derive = false) const;
594 
596  EdgeData* getEdgeList(void);
598  bool hasEdgeList(void);
600  ShadowRenderableListIterator getShadowVolumeRenderableIterator(
601  ShadowTechnique shadowTechnique, const Light* light,
602  HardwareIndexBufferSharedPtr* indexBuffer, size_t* indexBufferUsedSize,
603  bool extrudeVertices, Real extrusionDistance, unsigned long flags = 0 );
604 
606  const Matrix4* _getBoneMatrices(void) const { return mBoneMatrices;}
608  unsigned short _getNumBoneMatrices(void) const { return mNumBoneMatrices; }
610  bool hasSkeleton(void) const { return mSkeletonInstance != 0; }
612  SkeletonInstance* getSkeleton(void) const { return mSkeletonInstance; }
628  bool isHardwareAnimationEnabled(void);
629 
631  void _notifyAttached(Node* parent, bool isTagPoint = false);
639  int getSoftwareAnimationRequests(void) const { return mSoftwareAnimationRequests; }
651  int getSoftwareAnimationNormalsRequests(void) const { return mSoftwareAnimationNormalsRequests; }
667  void addSoftwareAnimationRequest(bool normalsAlso);
676  void removeSoftwareAnimationRequest(bool normalsAlso);
677 
682  void shareSkeletonInstanceWith(Entity* entity);
683 
686  bool hasVertexAnimation(void) const;
687 
688 
691  void stopSharingSkeletonInstance();
692 
693 
696  inline bool sharesSkeletonInstance() const { return mSharedSkeletonEntities != NULL; }
697 
701  inline const EntitySet* getSkeletonInstanceSharingSet() const { return mSharedSkeletonEntities; }
702 
713  void refreshAvailableAnimationState(void);
714 
722  void _updateAnimation(void);
723 
729  bool _isAnimated(void) const;
730 
733  bool _isSkeletonAnimated(void) const;
734 
744  VertexData* _getSkelAnimVertexData(void) const;
753  VertexData* _getSoftwareVertexAnimVertexData(void) const;
758  VertexData* _getHardwareVertexAnimVertexData(void) const;
762  TempBlendedBufferInfo* _getSkelAnimTempBufferInfo(void);
766  TempBlendedBufferInfo* _getVertexAnimTempBufferInfo(void);
768  uint32 getTypeFlags(void) const;
770  VertexData* getVertexDataForBinding(void);
771 
774  {
778  BIND_HARDWARE_MORPH
779  };
781  VertexDataBindChoice chooseVertexDataForBinding(bool hasVertexAnim);
782 
784  bool _getBuffersMarkedForAnimation(void) const { return mVertexAnimationAppliedThisFrame; }
787  void _markBuffersUsedForAnimation(void);
788 
797  bool isInitialised(void) const { return mInitialised; }
798 
810  void _initialise(bool forceReinitialise = false);
812  void _deinitialise(void);
813 
817  void backgroundLoadingComplete(Resource* res);
818 
820  void visitRenderables(Renderable::Visitor* visitor,
821  bool debugRenderables = false);
822 
824  Real _getMeshLodFactorTransformed() const;
825 
829  void setSkipAnimationStateUpdate(bool skip) {
830  mSkipAnimStateUpdates = skip;
831  }
832 
837  return mSkipAnimStateUpdates;
838  }
839 
844  void setAlwaysUpdateMainSkeleton(bool update) {
845  mAlwaysUpdateMainSkeleton = update;
846  }
847 
853  return mAlwaysUpdateMainSkeleton;
854  }
855 
856 
857  };
858 
861  {
862  protected:
863  MovableObject* createInstanceImpl( const String& name, const NameValuePairList* params);
864  public:
867 
869 
870  const String& getType(void) const;
871  void destroyInstance( MovableObject* obj);
872 
873  };
877 } // namespace Ogre
878 
879 #include "OgreHeaderSuffix.h"
880 
881 #endif // __Entity_H__
Class encapsulating a set of AnimationState objects.
unsigned char uint8
Definition: OgrePlatform.h:346
HardwareVertexBufferSharedPtr getPositionBuffer(void)
Definition: OgreEntity.h:341
A viewpoint from which the scene will be rendered.
Definition: OgreCamera.h:86
vector< SubEntity * >::type SubEntityList
List of SubEntities (point to SubMeshes).
Definition: OgreEntity.h:107
LODEntityList mLodEntityList
Definition: OgreEntity.h:255
Class encapsulating a standard 4x4 homogeneous matrix.
Definition: OgreMatrix4.h:78
float Real
Software floating point type.
unsigned int uint32
Definition: OgrePlatform.h:344
#define _OgreExport
Definition: OgrePlatform.h:260
const EntitySet * getSkeletonInstanceSharingSet() const
Returns a pointer to the set of entities which share a SkeletonInstance.
Definition: OgreEntity.h:701
ushort getCurrentLodIndex()
Returns the current LOD used to render.
Definition: OgreEntity.h:474
int mSoftwareAnimationNormalsRequests
Counter indicating number of requests for software blended normals.
Definition: OgreEntity.h:223
ushort mMinMeshLodIndex
Index of minimum detail LOD (NB higher index is lower detail).
Definition: OgreEntity.h:236
SkeletonInstance * getSkeleton(void) const
Get this Entity's personal skeleton instance.
Definition: OgreEntity.h:612
map< String, String >::type NameValuePairList
Name / value parameter pair (first = name, second = value)
Definition: OgreCommon.h:550
bool mVertexAnimationAppliedThisFrame
Have we applied any vertex animation to shared geometry?
Definition: OgreEntity.h:128
SubEntityList mSubEntityList
Definition: OgreEntity.h:108
Structure for recording the use of temporary blend buffers.
bool mCurrentHWAnimationState
Current state of the hardware animation as represented by the entities parameters.
Definition: OgreEntity.h:214
bool isInitialised(void) const
Has this Entity been initialised yet?
Definition: OgreEntity.h:797
TempBlendedBufferInfo mTempVertexAnimInfo
Temp buffer details for software vertex anim of shared geometry.
Definition: OgreEntity.h:120
int getSoftwareAnimationNormalsRequests(void) const
Returns the number of requests that have been made for software animation of normals.
Definition: OgreEntity.h:651
VertexData * mHardwareVertexAnimVertexData
Vertex data details for hardware vertex anim of shared geometry.
Definition: OgreEntity.h:126
Matrix4 mLastParentXform
Last parent transform.
Definition: OgreEntity.h:265
HardwareVertexBufferSharedPtr getWBuffer(void)
Definition: OgreEntity.h:342
bool mInitialised
Has this entity been initialised yet?
Definition: OgreEntity.h:262
static String AUTODETECT_RESOURCE_GROUP_NAME
Special resource group name which causes resource group to be automatically determined based on searc...
map< String, MovableObject * >::type ChildObjectList
Contains the child objects (attached to bones) indexed by name.
Definition: OgreEntity.h:304
static const Vector3 ZERO
Definition: OgreVector3.h:800
vector< Entity * >::type LODEntityList
List of LOD Entity instances (for manual LODs).
Definition: OgreEntity.h:254
Shared pointer implementation used to share vertex buffers.
int mSoftwareAnimationRequests
Counter indicating number of requests for software animation.
Definition: OgreEntity.h:221
A 3D box aligned with the x/y/z axes.
bool mAlwaysUpdateMainSkeleton
Flag indicating whether to update the main entity skeleton even when an LOD is displayed.
Definition: OgreEntity.h:227
VertexDataBindChoice
Identify which vertex data we should be sending to the renderer.
Definition: OgreEntity.h:773
Represents the state of an animation and the weight of its influence.
bool mVertexProgramInUse
Flag indicating whether we have a vertex program in use on any of our subentities.
Definition: OgreEntity.h:219
bool _getBuffersMarkedForAnimation(void) const
Are buffers already marked as vertex animated?
Definition: OgreEntity.h:784
ChildObjectList mChildObjectList
Definition: OgreEntity.h:306
EntitySet * mSharedSkeletonEntities
A set of all the entities which shares a single SkeletonInstance.
Definition: OgreEntity.h:198
int getSoftwareAnimationRequests(void) const
Returns the number of requests that have been made for software animation.
Definition: OgreEntity.h:639
Interface definition for a factory class which produces a certain kind of MovableObject, and can be registered with Root in order to allow all clients to produce new instances of this object, integrated with the standard Ogre processing.
SchemeHardwareAnimMap mSchemeHardwareAnim
Flag indicating whether hardware animation is supported by this entities materials data is saved per ...
Definition: OgreEntity.h:211
size_t mMeshStateCount
Mesh state count, used to detect differences.
Definition: OgreEntity.h:268
Abstract class defining a movable object in a scene.
MapIterator< ChildObjectList > ChildObjectListIterator
Definition: OgreEntity.h:584
bool mPreparedForShadowVolumes
Have the temp buffers already had their geometry prepared for use in rendering shadow volumes...
Definition: OgreEntity.h:130
std::set< T, P, A > type
Implementation of a Quaternion, i.e.
Concrete IteratorWrapper for nonconst access to the underlying key-value container.
unsigned short mOriginalPosBufferBinding
Original position buffer source binding.
Definition: OgreEntity.h:326
bool sharesSkeletonInstance() const
Returns whether this entity shares it's SkeltonInstance with other entity instances.
Definition: OgreEntity.h:696
void setAlwaysUpdateMainSkeleton(bool update)
The skeleton of the main entity will be updated even if the an LOD entity is being displayed...
Definition: OgreEntity.h:844
Shared pointer implementation used to share index buffers.
Representation of a dynamic light source in the scene.
Definition: OgreLight.h:73
VertexData * mSkelAnimVertexData
Vertex data details for software skeletal anim of shared geometry.
Definition: OgreEntity.h:118
static const Quaternion IDENTITY
ShadowTechnique
An enumeration of broad shadow techniques.
Definition: OgreCommon.h:190
map< unsigned short, bool >::type SchemeHardwareAnimMap
Definition: OgreEntity.h:90
bool mSkipAnimStateUpdates
Flag indicating whether to skip automatic updating of the Skeleton's AnimationState.
Definition: OgreEntity.h:225
Real mMeshLodFactorTransformed
LOD bias factor, transformed for optimisation when calculating adjusted LOD value.
Definition: OgreEntity.h:234
static String FACTORY_TYPE_NAME
Definition: OgreEntity.h:868
Utility class which defines the sub-parts of an Entity.
Definition: OgreSubEntity.h:63
MeshPtr mMesh
The Mesh that this Entity is based on.
Definition: OgreEntity.h:103
const VertexData * mCurrentVertexData
Link to current vertex data used to bind (maybe changes).
Definition: OgreEntity.h:324
AxisAlignedBox mFullBoundingBox
Bounding box that 'contains' all the mesh of each child entity.
Definition: OgreEntity.h:310
ushort mMaxMaterialLodIndex
Index of maximum detail LOD (NB lower index is higher detail).
Definition: OgreEntity.h:247
Class which represents the renderable aspects of a set of shadow volume faces.
A sphere primitive, mostly used for bounds checking.
Definition: OgreSphere.h:51
Defines an instance of a discrete, movable object based on a Mesh.
Definition: OgreEntity.h:82
Nested class to allow entity shadows.
Definition: OgreEntity.h:315
A tagged point on a skeleton, which can be used to attach entities to on specific other entities...
Definition: OgreTagPoint.h:60
Visitor object that can be used to iterate over a collection of Renderable instances abstractly...
Real mMaterialLodFactorTransformed
LOD bias factor, transformed for optimisation when calculating adjusted LOD value.
Definition: OgreEntity.h:243
ushort mHardwarePoseCount
Number of hardware poses supported by materials.
Definition: OgreEntity.h:217
const Matrix4 * _getBoneMatrices(void) const
Internal method for retrieving bone matrix information.
Definition: OgreEntity.h:606
unsigned long * mFrameBonesLastUpdated
Records the last frame in which the bones was updated.
Definition: OgreEntity.h:192
Standard 3-dimensional vector.
Definition: OgreVector3.h:51
unsigned short ushort
Abstract class representing a loadable resource (e.g.
Definition: OgreResource.h:79
bool getSkipAnimationStateUpdate() const
Entity's skeleton's AnimationState will not be automatically updated when set to true.
Definition: OgreEntity.h:836
ushort mMaxMeshLodIndex
Index of maximum detail LOD (NB lower index is higher detail).
Definition: OgreEntity.h:238
Summary class collecting together vertex source information.
TempBlendedBufferInfo mTempSkelAnimInfo
Temp buffer details for software skeletal anim of shared geometry.
Definition: OgreEntity.h:116
bool getAlwaysUpdateMainSkeleton() const
The skeleton of the main entity will be updated even if the an LOD entity is being displayed...
Definition: OgreEntity.h:852
Matrix4 * mBoneMatrices
Cached bone matrices in skeleton local space, might shares with other entity instances.
Definition: OgreEntity.h:181
Matrix4 * mBoneWorldMatrices
Cached bone matrices, including any world transform.
Definition: OgreEntity.h:179
Real mMaterialLodFactor
LOD bias factor, not transformed.
Definition: OgreEntity.h:241
ShadowRenderableList mShadowRenderables
Definition: OgreEntity.h:312
Factory object for creating Entity instances.
Definition: OgreEntity.h:860
Class to manage the scene object rendering queue.
bool mDisplaySkeleton
Flag determines whether or not to display skeleton.
Definition: OgreEntity.h:207
This class contains the information required to describe the edge connectivity of a given set of vert...
HardwareVertexBufferSharedPtr mPositionBuffer
Shared link to position buffer.
Definition: OgreEntity.h:320
VertexData * mSoftwareVertexAnimVertexData
Vertex data details for software vertex anim of shared geometry.
Definition: OgreEntity.h:122
ushort mMeshLodIndex
The LOD number of the mesh to use, calculated by _notifyCurrentCamera.
Definition: OgreEntity.h:231
void setSkipAnimationStateUpdate(bool skip)
Entity's skeleton's AnimationState will not be automatically updated when set to true.
Definition: OgreEntity.h:829
AnimationStateSet * mAnimationState
State of animation for animable meshes.
Definition: OgreEntity.h:112
_StringBase String
SkeletonInstance * mSkeletonInstance
This Entity's personal copy of the skeleton, if skeletally animated.
Definition: OgreEntity.h:259
unsigned long mFrameAnimationLastUpdated
Records the last frame in which animation was updated.
Definition: OgreEntity.h:184
Concrete IteratorWrapper for nonconst access to the underlying container.
SubEntity * mSubEntity
Link to SubEntity, only present if SubEntity has it's own geometry.
Definition: OgreEntity.h:328
bool hasSkeleton(void) const
Returns whether or not this entity is skeletally animated.
Definition: OgreEntity.h:610
Class representing a general-purpose node an articulated scene graph.
Definition: OgreNode.h:64
unsigned short _getNumBoneMatrices(void) const
Internal method for retrieving bone matrix information.
Definition: OgreEntity.h:608
A SkeletonInstance is a single instance of a Skeleton used by a world object.
ushort mMinMaterialLodIndex
Index of minimum detail LOD (NB higher index is lower detail).
Definition: OgreEntity.h:245
HardwareVertexBufferSharedPtr mWBuffer
Shared link to w-coord buffer (optional).
Definition: OgreEntity.h:322
set< Entity * >::type EntitySet
Definition: OgreEntity.h:89
vector< ShadowRenderable * >::type ShadowRenderableList
unsigned short mNumBoneMatrices
Definition: OgreEntity.h:182