28#ifndef __InstancedEntity_H__
29#define __InstancedEntity_H__
257 assert((!mNeedTransformUpdate || !mUseLocalTransform) &&
"Transform data should be updated at this point");
258 return mUseLocalTransform ? mFullLocalTransform :
259 mParentNode ? mParentNode->_getFullTransform() : Matrix4::IDENTITY;
264 assert((!mNeedTransformUpdate || !mUseLocalTransform) &&
"Transform data should be updated at this point");
265 return mUseLocalTransform ? mDerivedLocalPosition :
266 mParentNode ? mParentNode->_getDerivedPosition() : Vector3::ZERO;
Class encapsulating a set of AnimationState objects.
Represents the state of an animation and the weight of its influence.
A 3D box aligned with the x/y/z axes.
Instancing implementation using vertex texture through Vertex Texture Fetch (VTF) This implementation...
A viewpoint from which the scene will be rendered.
Instancing implementation using vertex texture through Vertex Texture Fetch (VTF) and hardware instan...
This is technique requires true instancing hardware support.
This is the same technique the old "InstancedGeometry" implementation used (with improvements).
InstanceBatch forms part of the new Instancing system This is an abstract class that must be derived ...
Class encapsulating a standard 4x4 homogeneous matrix.
Abstract class defining a movable object in a scene.
Utility class to generate a sequentially numbered series of names.
Class representing a general-purpose node an articulated scene graph.
Implementation of a Quaternion, i.e.
Class to manage the scene object rendering queue.
Visitor object that can be used to iterate over a collection of Renderable instances abstractly.
A SkeletonInstance is a single instance of a Skeleton used by a world object.
Standard 3-dimensional vector.
4-dimensional homogeneous vector.
void setCustomParam(unsigned char idx, const Vector4 &newParam)
Sets the custom parameter for this instance.
void _updateRenderQueue(RenderQueue *queue)
Do nothing, InstanceBatch takes care of this.
Matrix4 mFullLocalTransform
Full world transform.
InstanceBatch * mBatchOwner
void _notifyAttached(Node *parent, bool isTagPoint=false)
Internal method called to notify the object that it has been attached to a node.
InstancedEntityVec mSharingPartners
void createSkeletonInstance()
Creates/destroys our own skeleton, also tells slaves to unlink if we're destroying.
Real getMaxScaleCoef() const
Returns the maximum derived scale coefficient among the xyz values.
virtual bool isInScene(void) const
Returns true if this object is attached to a SceneNode or TagPoint, and this SceneNode / TagPoint is ...
Real getBoundingRadius(void) const
Retrieves the radius of the origin-centered bounding sphere for this object.
const Vector3 & getPosition() const
Retrieve the position.
InstanceBatch * _getOwner() const
const Quaternion & getOrientation() const
Retrieve the orientation.
bool mNeedTransformUpdate
Tells if mFullTransform needs an updated.
Real mMaxScaleLocal
The maximum absolute scale for all dimension.
const String & getMovableType(void) const
Returns the type name of this object.
Real getSquaredViewDepth(const Camera *cam) const
This is used by our batch owner to get the closest entity's depth, returns infinity when not attached...
InstancedEntity(InstanceBatch *batchOwner, uint32 instanceID, InstancedEntity *sharedTransformEntity=NULL)
virtual bool _updateAnimation(void)
Called by InstanceBatch in his _updateRenderQueue to tell us we need to calculate our bone matrices.
size_t getTransforms(Matrix4 *xform) const
Returns number of matrices written to transform, assumes transform has enough space.
const AxisAlignedBox & getBoundingBox(void) const
Retrieves the local axis-aligned bounding box for this object.
const Vector3 & getScale() const
Retrieve the local scale.
virtual ~InstancedEntity()
void setPosition(const Vector3 &position, bool doUpdate=true)
Set the position or the offset from the parent node if a parent node exists.
void setOrientation(const Quaternion &orientation, bool doUpdate=true)
Set the orientation or the offset from the parent node if a parent node exists.
InstancedEntity * mSharedTransformEntity
AnimationStateSet * getAllAnimationStates(void) const
const Vector3 & _getDerivedPosition() const
Returns the derived position of the instanced entity including local transform.
uint16 mTransformLookupNumber
Used in conjunction with bone matrix lookup.
void stopSharingTransform()
bool mUseLocalTransform
Tells whether to use the local transform parameters.
void setScale(const Vector3 &scale, bool doUpdate=true)
Set the scale or the offset from the parent node if a parent node exists
Matrix4 * mBoneWorldMatrices
bool mNeedAnimTransformUpdate
Tells if the animation world transform needs an update.
void stopSharingTransformAsSlave(bool notifyMaster)
When this entity is a slave, stopSharingTransform delegates to this function.
bool isInUse() const
Tells if the entity is in use.
static NameGenerator msNameGenerator
Incremented count for next name extension.
Vector3 mPosition
Object position.
void setInUse(bool used)
Sets whether the entity is in use.
Quaternion mOrientation
Object orientation.
AnimationStateSet * mAnimationState
void unlinkTransform(bool notifyMaster=true)
Just unlinks, and tells our master we're no longer sharing.
void updateTransforms()
Update the world transform and derived values.
Vector3 mScale
Object scale.
SkeletonInstance * mSkeletonInstance
void visitRenderables(Renderable::Visitor *visitor, bool debugRenderables=false)
Method to allow a caller to abstractly iterate over the Renderable instances that this MovableObject ...
void markTransformDirty()
Mark the transformation matrixes as dirty.
AnimationState * getAnimationState(const String &name) const
void destroySkeletonInstance()
void _notifyMoved(void)
Overridden so we can tell the InstanceBatch it needs to update it's bounds.
const Vector4 & getCustomParam(unsigned char idx)
unsigned long mFrameAnimationLastUpdated
Vector3 mDerivedLocalPosition
void notifyUnlink(const InstancedEntity *slave)
Called when a slave has unlinked from us.
size_t getTransforms3x4(float *xform) const
Returns number of 32-bit values written.
bool shareTransformWith(InstancedEntity *slave)
Shares the entire transformation with another InstancedEntity.
bool hasSkeleton(void) const
SkeletonInstance * getSkeleton(void) const
bool findVisible(Camera *camera) const
Returns true if this InstancedObject is visible to the current camera.
void setTransformLookupNumber(uint16 num)
Sets the transformation look up number.
vector< InstancedEntity * >::type InstancedEntityVec
Stores the master when we're the slave, store our slaves when we're the master.
virtual const Matrix4 & _getParentNodeFullTransform(void) const
Returns the world transform of the instanced entity including local transform.
float Real
Software floating point type.