OGRE  1.9.0
OgreBillboardChain.h
Go to the documentation of this file.
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4(Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2014 Torus Knot Software Ltd
8
9Permission is hereby granted, free of charge, to any person obtaining a copy
10of this software and associated documentation files (the "Software"), to deal
11in the Software without restriction, including without limitation the rights
12to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13copies of the Software, and to permit persons to whom the Software is
14furnished to do so, subject to the following conditions:
15
16The above copyright notice and this permission notice shall be included in
17all copies or substantial portions of the Software.
18
19THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25THE SOFTWARE.
26-----------------------------------------------------------------------------
27*/
28
29// Thanks to Vincent Cantin (karmaGfa) for the original implementation of this
30// class, although it has now been mostly rewritten
31
32#ifndef _BillboardChain_H__
33#define _BillboardChain_H__
34
35#include "OgrePrerequisites.h"
36
37#include "OgreMovableObject.h"
38#include "OgreRenderable.h"
40#include "OgreHeaderPrefix.h"
41
42namespace Ogre {
43
78 {
79
80 public:
81
85 {
86
87 public:
88
90
91 Element(const Vector3 &position,
92 Real width,
93 Real texCoord,
94 const ColourValue &colour,
95 const Quaternion &orientation);
96
102
105 };
107
116 BillboardChain(const String& name, size_t maxElements = 20, size_t numberOfChains = 1,
117 bool useTextureCoords = true, bool useColours = true, bool dynamic = true);
120
123 virtual void setMaxChainElements(size_t maxElements);
126 virtual size_t getMaxChainElements(void) const { return mMaxElementsPerChain; }
130 virtual void setNumberOfChains(size_t numChains);
134 virtual size_t getNumberOfChains(void) const { return mChainCount; }
135
142 virtual void setUseTextureCoords(bool use);
146 virtual bool getUseTextureCoords(void) const { return mUseTexCoords; }
147
152 {
156 TCD_V
157 };
166 virtual TexCoordDirection getTextureCoordDirection(void) { return mTexCoordDir; }
167
173 virtual void setOtherTextureCoordRange(Real start, Real end);
177 virtual const Real* getOtherTextureCoordRange(void) const { return mOtherTexCoordRange; }
178
185 virtual void setUseVertexColours(bool use);
189 virtual bool getUseVertexColours(void) const { return mUseVertexColour; }
190
194 virtual void setDynamic(bool dyn);
195
199 virtual bool getDynamic(void) const { return mDynamic; }
200
209 virtual void addChainElement(size_t chainIndex,
210 const Element& billboardChainElement);
214 virtual void removeChainElement(size_t chainIndex);
221 virtual void updateChainElement(size_t chainIndex, size_t elementIndex,
222 const Element& billboardChainElement);
228 virtual const Element& getChainElement(size_t chainIndex, size_t elementIndex) const;
229
231 virtual size_t getNumChainElements(size_t chainIndex) const;
232
234 virtual void clearChain(size_t chainIndex);
236 virtual void clearAllChains(void);
237
254 void setFaceCamera( bool faceCamera, const Vector3 &normalVector=Vector3::UNIT_X );
255
257 virtual const String& getMaterialName(void) const { return mMaterialName; }
259 virtual void setMaterialName( const String& name, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME );
260
261
262 // Overridden members follow
263 Real getSquaredViewDepth(const Camera* cam) const;
265 const AxisAlignedBox& getBoundingBox(void) const;
266 const MaterialPtr& getMaterial(void) const;
267 const String& getMovableType(void) const;
270 virtual bool preRender(SceneManager* sm, RenderSystem* rsys);
272 const LightList& getLights(void) const;
275 bool debugRenderables = false);
276
277
278
279 protected:
280
300 mutable bool mBoundsDirty;
308 mutable Real mRadius;
315 Real mOtherTexCoordRange[2];
324
325
328
337 {
339 size_t start;
341 size_t head;
343 size_t tail;
344 };
347
349 virtual void setupChainContainers(void);
351 virtual void setupVertexDeclaration(void);
353 virtual void setupBuffers(void);
355 virtual void updateVertexBuffer(Camera* cam);
357 virtual void updateIndexBuffer(void);
358 virtual void updateBoundingBox(void) const;
359
361 static const size_t SEGMENT_EMPTY;
362 };
363
364
367 {
368 protected:
370 public:
373
375
376 const String& getType(void) const;
378
379 };
380
384} // namespace
385
386#include "OgreHeaderSuffix.h"
387
388#endif
389
390
#define _OgreExport
A 3D box aligned with the x/y/z axes.
Factory object for creating BillboardChain instances.
MovableObject * createInstanceImpl(const String &name, const NameValuePairList *params)
Internal implementation of create method - must be overridden.
void destroyInstance(MovableObject *obj)
Destroy an instance of the object.
const String & getType(void) const
Get the type of the object to be created.
Contains the data of an element of the BillboardChain.
Quaternion orientation
Only used when mFaceCamera == false.
Element(const Vector3 &position, Real width, Real texCoord, const ColourValue &colour, const Quaternion &orientation)
Real texCoord
U or V texture coord depending on options.
Allows the rendering of a chain of connected billboards.
const AxisAlignedBox & getBoundingBox(void) const
Retrieves the local axis-aligned bounding box for this object.
virtual void addChainElement(size_t chainIndex, const Element &billboardChainElement)
Add an element to the 'head' of a chain.
const LightList & getLights(void) const
Gets a list of lights, ordered relative to how close they are to this renderable.
TexCoordDirection mTexCoordDir
Texture coord direction.
virtual bool getUseTextureCoords(void) const
Gets whether texture coordinate information should be included in the final buffers generated.
Camera * mVertexCameraUsed
Camera last used to build the vertex buffer.
const String & getMovableType(void) const
Returns the type name of this object.
void _updateRenderQueue(RenderQueue *)
Internal method by which the movable object must add Renderable subclass instances to the rendering q...
void getRenderOperation(RenderOperation &)
Gets the render operation required to send this object to the frame buffer.
virtual void setupBuffers(void)
Setup buffers.
void setFaceCamera(bool faceCamera, const Vector3 &normalVector=Vector3::UNIT_X)
Sets whether the billboard should always be facing the camera or a custom direction set by each point...
ElementList mChainElementList
The list holding the chain elements.
virtual void clearAllChains(void)
Remove all elements from all chains (but leave the chains themselves intact).
bool mFaceCamera
When true, the billboards always face the camera.
virtual void setupChainContainers(void)
Setup the STL collections.
virtual void setupVertexDeclaration(void)
Setup vertex declaration.
bool mBoundsDirty
Do the bounds need redefining?
virtual size_t getNumChainElements(size_t chainIndex) const
Returns the number of chain elements.
virtual void updateIndexBuffer(void)
Update the contents of the index buffer.
bool mUseVertexColour
Use vertex colour?
Vector3 mNormalBase
Used when mFaceCamera == false; determines the billboard's "normal".
String mMaterialName
Material.
bool mUseTexCoords
Use texture coords?
BillboardChain(const String &name, size_t maxElements=20, size_t numberOfChains=1, bool useTextureCoords=true, bool useColours=true, bool dynamic=true)
Constructor (don't use directly, use factory)
Real getBoundingRadius(void) const
Retrieves the radius of the origin-centered bounding sphere for this object.
virtual void setUseVertexColours(bool use)
Sets whether vertex colour information should be included in the final buffers generated.
virtual void setTextureCoordDirection(TexCoordDirection dir)
Sets the direction in which texture coords specified on each element are deemed to run along the leng...
virtual void removeChainElement(size_t chainIndex)
Remove an element from the 'tail' of a chain.
bool mIndexContentDirty
Is the index buffer dirty?
vector< ChainSegment >::type ChainSegmentList
bool mVertexContentDirty
Is the vertex buffer dirty?
TexCoordDirection
The direction in which texture coordinates from elements of the chain are used.
@ TCD_U
Tex coord in elements is treated as the 'u' texture coordinate.
void visitRenderables(Renderable::Visitor *visitor, bool debugRenderables=false)
Method to allow a caller to abstractly iterate over the Renderable instances that this MovableObject ...
virtual void setMaxChainElements(size_t maxElements)
Set the maximum number of chain elements per chain.
static const size_t SEGMENT_EMPTY
Chain segment has no elements.
IndexData * mIndexData
Index data (to allow multiple unconnected chains)
AxisAlignedBox mAABB
AABB.
bool mVertexDeclDirty
Is the vertex declaration dirty?
virtual TexCoordDirection getTextureCoordDirection(void)
Gets the direction in which texture coords specified on each element are deemed to run.
virtual ~BillboardChain()
Destructor.
virtual void setNumberOfChains(size_t numChains)
Set the number of chain segments (this class can render multiple chains at once using the same materi...
virtual void setDynamic(bool dyn)
Sets whether or not the buffers created for this object are suitable for dynamic alteration.
virtual size_t getMaxChainElements(void) const
Get the maximum number of chain elements per chain.
virtual bool getDynamic(void) const
Gets whether or not the buffers created for this object are suitable for dynamic alteration.
virtual void setOtherTextureCoordRange(Real start, Real end)
Set the range of the texture coordinates generated across the width of the chain elements.
virtual void updateVertexBuffer(Camera *cam)
Update the contents of the vertex buffer.
virtual const Real * getOtherTextureCoordRange(void) const
Get the range of the texture coordinates generated across the width of the chain elements.
virtual bool getUseVertexColours(void) const
Gets whether vertex colour information should be included in the final buffers generated.
size_t mChainCount
Number of chains.
Real getSquaredViewDepth(const Camera *cam) const
Returns the camera-relative squared depth of this renderable.
virtual void setUseTextureCoords(bool use)
Sets whether texture coordinate information should be included in the final buffers generated.
virtual void updateChainElement(size_t chainIndex, size_t elementIndex, const Element &billboardChainElement)
Update the details of an existing chain element.
Real mRadius
Bounding radius.
vector< Element >::type ElementList
virtual void clearChain(size_t chainIndex)
Remove all elements of a given chain (but leave the chain intact).
virtual void updateBoundingBox(void) const
bool mDynamic
Dynamic use?
bool mBuffersNeedRecreating
Do the buffers need recreating?
const MaterialPtr & getMaterial(void) const
Retrieves a weak reference to the material this renderable object uses.
size_t mMaxElementsPerChain
Maximum length of each chain.
ChainSegmentList mChainSegmentList
virtual bool preRender(SceneManager *sm, RenderSystem *rsys)
Called just prior to the Renderable being rendered.
virtual const String & getMaterialName(void) const
Get the material name in use.
virtual size_t getNumberOfChains(void) const
Get the number of chain segments (this class can render multiple chains at once using the same materi...
void getWorldTransforms(Matrix4 *) const
Gets the world transform matrix / matrices for this renderable object.
VertexData * mVertexData
Vertex data.
virtual void setMaterialName(const String &name, const String &groupName=ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME)
Set the material name to use for rendering.
virtual const Element & getChainElement(size_t chainIndex, size_t elementIndex) const
Get the detail of a chain element.
A viewpoint from which the scene will be rendered.
Definition OgreCamera.h:87
Class representing colour.
Summary class collecting together index data source information.
Class encapsulating a standard 4x4 homogeneous matrix.
Definition OgreMatrix4.h:79
Interface definition for a factory class which produces a certain kind of MovableObject,...
Abstract class defining a movable object in a scene.
Implementation of a Quaternion, i.e.
'New' rendering operation using vertex buffers.
Class to manage the scene object rendering queue.
Defines the functionality of a 3D API.
Visitor object that can be used to iterate over a collection of Renderable instances abstractly.
Abstract class defining the interface all renderable objects must implement.
Manages the organisation and rendering of a 'scene' i.e.
Standard 3-dimensional vector.
Definition OgreVector3.h:52
Summary class collecting together vertex source information.
map< String, String >::type NameValuePairList
Name / value parameter pair (first = name, second = value)
Definition OgreCommon.h:550
float Real
Software floating point type.
_StringBase String
Simple struct defining a chain segment by referencing a subset of the preallocated buffer (which will...
size_t head
The 'head' of the chain, relative to start.
size_t start
The start of this chains subset of the buffer.
size_t tail
The 'tail' of the chain, relative to start.
std::vector< T, A > type