Go to the documentation of this file.
28 #ifndef __InstancedGeometry_H__
29 #define __InstancedGeometry_H__
206 void copyIndexes(
const T* src, T* dst,
size_t count,
size_t indexOffset)
208 if (indexOffset == 0)
210 memcpy(dst, src,
sizeof(T) * count);
216 *dst++ =
static_cast<T
>(*src++ + indexOffset);
233 Real getBoundingRadius(
void)
const;
241 void getWorldTransforms(
Matrix4* xform)
const;
242 virtual unsigned short getNumWorldTransforms(
void)
const ;
243 Real getSquaredViewDepth(
const Camera* cam)
const;
245 bool getCastsShadows(
void)
const;
246 String getFormatString(
void)
const;
254 void dump(std::ofstream& of)
const;
297 void setPosition(
Vector3 position);
298 const Vector3& getPosition(
void)
const;
299 void yaw(
const Radian& angle);
300 void pitch(
const Radian& angle);
301 void roll(
const Radian& angle);
303 void setScale(
const Vector3& scale);
304 const Vector3& getScale()
const;
312 void translate(
const Vector3& d);
313 Matrix3 getLocalAxes(
void)
const;
314 void updateAnimation(
void);
366 void dump(std::ofstream& of)
const;
375 void setMaterial(
const String & name);
420 void dump(std::ofstream& of)
const;
493 const String& getMovableType(
void)
const;
494 void _notifyCurrentCamera(
Camera* cam);
497 Real getBoundingRadius(
void)
const;
499 bool isVisible(
void)
const;
502 bool debugRenderables =
false);
513 void updateBoundingBox();
516 void dump(std::ofstream& of)
const;
518 void updateContainers(
LODBucket* bucket );
520 void attachToScene();
521 void addInstancedObject(
unsigned short index,
InstancedObject*
object);
598 virtual void getBatchInstanceIndexes(
const Vector3& point,
631 template <
typename T>
635 for (
size_t i = 0; i < numIndexes; ++i)
638 remap.insert(IndexRemap::value_type(*pBuffer++, remap.size()));
644 template <
typename T>
648 for (
size_t i = 0; i < numIndexes; ++i)
651 IndexRemap::const_iterator ix = remap.find(*src++);
652 assert(ix != remap.end());
653 *dst++ =
static_cast<T
>(ix->second);
707 virtual void addSceneNode(
const SceneNode* node);
719 virtual void build(
void);
728 void addBatchInstance(
void);
734 virtual void destroy(
void);
739 virtual void reset(
void);
751 mUpperDistance = dist;
752 mSquaredUpperDistance = mUpperDistance * mUpperDistance;
760 {
return mSquaredUpperDistance; }
763 virtual void setVisible(
bool visible);
785 virtual void setCastShadows(
bool castShadows);
800 mBatchInstanceDimensions = size;
801 mHalfBatchInstanceDimensions = size * 0.5;
831 virtual void setRenderQueueGroup(
uint8 queueID);
834 virtual uint8 getRenderQueueGroup(
void)
const;
843 bool debugRenderables =
false);
848 virtual void dump(
const String& filename)
const;
876 virtual void setProvideWorldInverses(
bool flag);
Mesh::LodValueList mLodValues
LOD values as built up - use the max at each level.
map< String, GeometryBucket * >::type CurrentGeometryMap
BatchInstance * mInstancedGeometryInstance
const LodStrategy * mLodStrategy
LOD strategy reference.
static const Vector3 UNIT_SCALE
unsigned short mNumBoneMatrices
IndexData * mIndexData
Index information, includes index type which limits the max number of vertices which are allowed in o...
map< uint32, BatchInstance * >::type BatchInstanceMap
Indexed BatchInstance map based on packed x/y/z BatchInstance index, 10 bits for each axis.
vector< Real >::type LodValueList
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
const String & getName(void) const
Get the name of this object.
VectorIterator< GeometryBucketList > GeometryIterator
Iterator over geometry.
list< OptimisedSubMeshGeometry * >::type OptimisedSubMeshGeometryList
GeometryBucketList & getGeometryBucketList(void)
vector< String >::type QueuedSubMeshOriginList
const MaterialPtr & getMaterial(void) const
Get the material for this bucket.
A viewpoint from which the scene will be rendered.
Camera * mCamera
Current camera, passed on to do material LOD later.
LODBucket * getParent(void)
Matrix4 * mBoneWorldMatrices
Cached bone matrices, including any world transform.
MapIterator< ObjectsMap > InstancedObjectIterator
MapIterator< MaterialBucketMap > MaterialIterator
Iterator over the materials in this LOD.
bool mProvideWorldInverses
Flags to indicate whether the World Transform Inverse matrices are passed to the shaders.
void buildIndexRemap(T *pBuffer, size_t numIndexes, IndexRemap &remap)
Method for figuring out which vertices are used by an index buffer and calculating a remap lookup for...
Structure recording a queued submesh for the build.
MaterialBucket * mParent
Pointer to parent bucket.
virtual bool getProvideWorldInverses(void) const
AxisAlignedBox mAABB
Local AABB relative to BatchInstance centre.
virtual void setBatchInstanceDimensions(const Vector3 &size)
Sets the size of a single BatchInstance of geometry.
Concrete IteratorWrapper for nonconst access to the underlying container.
A 3x3 matrix which can represent rotations around axes.
OptimisedSubMeshGeometryList mOptimisedSubMeshGeometryList
List of geometry which has been optimised for SubMesh use This is the primary storage used for cleani...
Real mSquaredViewDepth
Cached squared view depth value to avoid recalculation by GeometryBucket.
Abstract class defining a movable object in a scene.
ushort getLod(void) const
Get the LOD index.
String mMaterialName
Material being used.
Saved link between SubMesh at a LOD and vertex/index data May point to original or optimised geometry...
QueuedSubMeshList mQueuedSubMeshes
SceneNode * getSceneNode(void)
virtual Real getRenderingDistance(void) const
Gets the distance at which batches are no longer rendered.
void remapIndexes(T *src, T *dst, const IndexRemap &remap, size_t numIndexes)
Method for altering indexes based on a remap.
virtual void setRenderingDistance(Real dist)
Sets the distance at which batches are no longer rendered.
const String & getMaterialName(void) const
Get the material name.
unsigned int mObjectCount
number of objects in the batch
MaterialPtr mMaterial
Pointer to material being used.
@ TS_LOCAL
Transform is relative to the local space.
Class representing an approach to rendering this particular Material.
SkeletonPtr getBaseSkeleton(void)
OptimisedSubMeshGeometry()
RenderOperationVector & getRenderOperationVector()
get the mRenderOps vector.
Real mBoundingRadius
Local bounding radius.
Defines an instance of a discrete, movable object based on a Mesh.
Represents the state of an animation and the weight of its influence.
Class representing a node in the scene graph.
Technique * mTechnique
Active technique.
String mFormatString
String identifying the vertex / index format.
unsigned short mLod
LOD level (0 == full LOD)
GeometryBucketList mGeometryBucketList
Pre-transforms and batches up meshes for efficient use as instanced geometry in a scene.
LODBucketList mLodBucketList
List of LOD buckets
SceneNode * mNode
Scene node.
vector< QueuedGeometry * >::type QueuedGeometryList
Real mLodValue
LOD value at which this LOD starts to apply (squared)
Summary class collecting together vertex source information.
vector< GeometryBucket * >::type GeometryBucketList
list of Geometry Buckets in this BatchInstance
ushort mCurrentLod
The current LOD level, as determined from the last camera.
virtual bool isVisible(void) const
Are the batches visible?
Implementation of a Quaternion, i.e.
Strategy for determining level of detail.
SubMeshLodGeometryLinkList * geometryLodList
Link to LOD list of geometry, potentially optimised.
map< String, MaterialBucket * >::type MaterialBucketMap
Lookup of Material Buckets in this BatchInstance.
AnimationStateSet * getBaseAnimationState(void)
Technique * getCurrentTechnique(void) const
Get the current Technique.
SkeletonInstance * getSkeletonInstance(void)
A MaterialBucket is a collection of smaller buckets with the same Material (and implicitly the same L...
Class encapsulating a standard 4x4 homogeneous matrix.
Structure recording a queued geometry for low level builds.
uint8 mRenderQueueID
The render queue to use when rendering this object.
virtual void setOrigin(const Vector3 &origin)
Sets the origin of the geometry.
Manages the organisation and rendering of a 'scene' i.e.
InstancedGeometry * mParent
Parent static geometry.
uint32 mBatchInstanceID
Unique identifier for the BatchInstance.
GeometryBucketList mGeometryBucketList
list of Geometry Buckets in this BatchInstance
A LODBucket is a collection of smaller buckets with the same LOD.
AnimationStateSet * mAnimationState
State of animation for animable meshes.
unsigned int getObjectCount(void)
Defines a part of a complete mesh.
CurrentGeometryMap mCurrentGeometryMap
VertexData * mVertexData
Vertex information, includes current number of vertices committed to be a part of this bucket.
Real mSquaredUpperDistance
uint32 getID(void) const
Get the BatchInstance ID of this BatchInstance.
unsigned short mTexCoordIndex
Index of the Texcoord where the index is stored.
map< size_t, size_t >::type IndexRemap
const VertexData * getVertexData(void) const
Get the vertex data for this geometry.
Wrapper class which indicates a given angle value is in Radians.
VectorIterator< LODBucketList > LODIterator
BatchInstance * mParent
Pointer to parent BatchInstance.
SkeletonInstance * mSkeletonInstance
QueuedGeometryList mQueuedGeometry
Geometry which has been queued up pre-build (not for deallocation)
A 3D box aligned with the x/y/z axes.
InstancedGeometry * mBatch
Pointer to the Batch.
SubMeshLodGeometryLink * geometry
vector< LODBucket * >::type LODBucketList
list of LOD Buckets in this BatchInstance
MapIterator< BatchInstanceMap > BatchInstanceIterator
Iterator for iterating over contained BatchInstances.
vector< QueuedSubMesh * >::type QueuedSubMeshList
Vector3 mHalfBatchInstanceDimensions
AxisAlignedBox & getAABB(void)
Return the BoundingBox information. Useful when cloning the batch instance.
vector< GeometryBucket * >::type GeometryBucketList
list of Geometry Buckets that contains the instanced object
SkeletonPtr mBaseSkeleton
this is just a pointer to the base skeleton that will be used for each animated object in the batches...
LODBucket * mParent
Pointer to parent LODBucket.
void copyIndexes(const T *src, T *dst, size_t count, size_t indexOffset)
QueuedGeometryList mQueuedGeometryList
Geometry queued for a single LOD (deallocated here)
size_t mMaxVertexIndex
Maximum vertex indexable.
Concrete IteratorWrapper for nonconst access to the underlying key-value container.
Class encapsulating a set of AnimationState objects.
A GeometryBucket is a the lowest level bucket where geometry with the same vertex & index format is s...
AnimationStateSet * mAnimationState
This is the main animation state.
virtual const Vector3 & getBatchInstanceDimensions(void) const
Gets the size of a single batch of geometry.
RenderOperationVector mRenderOps
This vector stores all the renderOperation used in the batch.
unsigned long mFrameAnimationLastUpdated
Records the last frame in which animation was updated.
std::map< K, V, P, A > type
Vector3 mBatchInstanceDimensions
A SkeletonInstance is a single instance of a Skeleton used by a world object.
HardwareIndexBuffer::IndexType mIndexType
Size of indexes.
AxisAlignedBox worldBounds
Pre-transformed world AABB.
Visitor object that can be used to iterate over a collection of Renderable instances abstractly.
Matrix4 * mBoneMatrices
Cached bone matrices in skeleton local space.
virtual Real getSquaredRenderingDistance(void) const
Gets the squared distance at which batches are no longer rendered.
The details of a topological BatchInstance which is the highest level of partitioning for this class.
Simple implementation of MovableObject and Renderable for single-part custom objects.
ObjectsMap & getInstancesMap(void)
MaterialBucketMap mMaterialBucketMap
Lookup of Material Buckets in this BatchInstance.
static const Quaternion IDENTITY
SkeletonInstance * mSkeletonInstance
Real getLodValue(void) const
Get the LOD value.
float Real
Software floating point type.
QueuedSubMeshList mQueuedSubMeshes
Local list of queued meshes (not used for deallocation)
void setLastIndex(int index)
const IndexData * getIndexData(void) const
Get the index data for this geometry.
InstancedGeometry * getParent(void) const
SkeletonInstance * getBaseSkeletonInstance(void)
@ TS_PARENT
Transform is relative to the space of the parent node.
virtual bool getCastShadows(void)
Will the geometry from this object cast shadows?
vector< SubMeshLodGeometryLink >::type SubMeshLodGeometryLinkList
MaterialBucket * getParent(void)
Struct holding geometry optimised per SubMesh / LOD level, ready for copying to instances.
map< SubMesh *, SubMeshLodGeometryLinkList * >::type SubMeshGeometryLookup
bool mRenderQueueIDSet
Flags whether the RenderQueue's default should be used.
map< unsigned short, InstancedObject * >::type ObjectsMap
vector< RenderOperation * >::type RenderOperationVector
Simple vectors where are stored all the render operations of the Batch.
BatchInstance * getParent(void)
virtual const Vector3 & getOrigin(void) const
Gets the origin of this geometry.
Summary class collecting together index data source information.
BatchInstanceMap mBatchInstanceMap
Map of BatchInstances.
Standard 3-dimensional vector.
Real mLodValue
Current LOD value, passed on to do material LOD later.
Class to manage the scene object rendering queue.
SceneManager * mSceneMgr
Scene manager link.
~OptimisedSubMeshGeometry()
SubMeshGeometryLookup mSubMeshGeometryLookup
Cached links from SubMeshes to (potentially optimised) geometry This is not used for deletion since t...
Copyright © 2012 Torus Knot Software Ltd

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Tue Apr 13 2021 08:53:15