# OgreManualObject.h

Go to the documentation of this file.

    00001 /*
    00002 -----------------------------------------------------------------------------
    00003 This source file is part of OGRE
    00004 (Object-oriented Graphics Rendering Engine)
    00005 For the latest info, see http://www.ogre3d.org/
    00006
    00007 Copyright (c) 2000-2009 Torus Knot Software Ltd
    00008
    00009 Permission is hereby granted, free of charge, to any person obtaining a copy
    00010 of this software and associated documentation files (the "Software"), to deal
    00011 in the Software without restriction, including without limitation the rights
    00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    00013 copies of the Software, and to permit persons to whom the Software is
    00014 furnished to do so, subject to the following conditions:
    00015
    00016 The above copyright notice and this permission notice shall be included in
    00017 all copies or substantial portions of the Software.
    00018
    00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    00025 THE SOFTWARE.
    00026 -----------------------------------------------------------------------------
    00027 */
    00028
    00029 #ifndef __OgreManualObject_H__
    00030 #define __OgreManualObject_H__
    00031
    00032 #include "OgrePrerequisites.h"
    00033 #include "OgreMovableObject.h"
    00034 #include "OgreRenderable.h"
    00035 #include "OgreResourceGroupManager.h"
    00036
    00037
    00038 namespace Ogre
    00039 {
    00106     class _OgreExport ManualObject : public MovableObject
    00107     {
    00108     public:
    00109         ManualObject(const String& name);
    00110         virtual ~ManualObject();
    00111
    00112         //pre-declare ManualObjectSection
    00113         class ManualObjectSection;
    00114
    00124         virtual void clear(void);
    00125
    00133         virtual void estimateVertexCount(size_t vcount);
    00134
    00142         virtual void estimateIndexCount(size_t icount);
    00143
    00153         virtual void begin(const String& materialName,
    00154             RenderOperation::OperationType opType = RenderOperation::OT_TRIANGLE_LIST, const String & groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
    00155
    00159         virtual void setDynamic(bool dyn) { mDynamic = dyn; }
    00161         virtual bool getDynamic() const { return mDynamic; }
    00162
    00174         virtual void beginUpdate(size_t sectionIndex);
    00182         virtual void position(const Vector3& pos);
    00184         virtual void position(Real x, Real y, Real z);
    00185
    00191         virtual void normal(const Vector3& norm);
    00193         virtual void normal(Real x, Real y, Real z);
    00194
    00202         virtual void tangent(const Vector3& tan);
    00204         virtual void tangent(Real x, Real y, Real z);
    00205
    00214         virtual void textureCoord(Real u);
    00216         virtual void textureCoord(Real u, Real v);
    00218         virtual void textureCoord(Real u, Real v, Real w);
    00220         virtual void textureCoord(Real x, Real y, Real z, Real w);
    00222         virtual void textureCoord(const Vector2& uv);
    00224         virtual void textureCoord(const Vector3& uvw);
    00226         virtual void textureCoord(const Vector4& xyzw);
    00227
    00230         virtual void colour(const ColourValue& col);
    00234         virtual void colour(Real r, Real g, Real b, Real a = 1.0f);
    00235
    00247         virtual void index(uint32 idx);
    00256         virtual void triangle(uint32 i1, uint32 i2, uint32 i3);
    00265         virtual void quad(uint32 i1, uint32 i2, uint32 i3, uint32 i4);
    00266
    00271         virtual ManualObjectSection* end(void);
    00272
    00282         virtual void setMaterialName(size_t subindex, const String& name, const String & group = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
    00283
    00295         virtual MeshPtr convertToMesh(const String& meshName,
    00296             const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
    00297
    00307         void setUseIdentityProjection(bool useIdentityProjection);
    00308
    00318         bool getUseIdentityProjection(void) const { return mUseIdentityProjection; }
    00319
    00329         void setUseIdentityView(bool useIdentityView);
    00330
    00340         bool getUseIdentityView(void) const { return mUseIdentityView; }
    00341
    00349         void setBoundingBox(const AxisAlignedBox& box) { mAABB = box; }
    00350
    00353         ManualObjectSection* getSection(unsigned int index) const;
    00354
    00357         unsigned int getNumSections(void) const;
    00367         void setKeepDeclarationOrder(bool keepOrder) { mKeepDeclarationOrder = keepOrder; }
    00368
    00373         bool getKeepDeclarationOrder() const { return mKeepDeclarationOrder; }
    00374         // MovableObject overrides
    00375
    00377         const String& getMovableType(void) const;
    00379         const AxisAlignedBox& getBoundingBox(void) const;
    00381         Real getBoundingRadius(void) const;
    00383         void _updateRenderQueue(RenderQueue* queue);
    00385         EdgeData* getEdgeList(void);
    00387         bool hasEdgeList(void);
    00389         ShadowRenderableListIterator getShadowVolumeRenderableIterator(
    00390             ShadowTechnique shadowTechnique, const Light* light,
    00391             HardwareIndexBufferSharedPtr* indexBuffer,
    00392             bool extrudeVertices, Real extrusionDist, unsigned long flags = 0);
    00393
    00394
    00396         class _OgreExport ManualObjectSection : public Renderable, public MovableAlloc
    00397         {
    00398         protected:
    00399             ManualObject* mParent;
    00400             String mMaterialName;
    00401             String mGroupName;
    00402             mutable MaterialPtr mMaterial;
    00403             RenderOperation mRenderOperation;
    00404             bool m32BitIndices;
    00405
    00406
    00407         public:
    00408             ManualObjectSection(ManualObject* parent, const String& materialName,
    00409                 RenderOperation::OperationType opType, const String & groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
    00410             virtual ~ManualObjectSection();
    00411
    00413             RenderOperation* getRenderOperation(void);
    00415             const String& getMaterialName(void) const { return mMaterialName; }
    00417             const String& getMaterialGroup(void) const { return mGroupName; }
    00419             void setMaterialName(const String& name, const String& groupName = ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME );
    00421             void set32BitIndices(bool n32) { m32BitIndices = n32; }
    00423             bool get32BitIndices() const { return m32BitIndices; }
    00424
    00425             // Renderable overrides
    00427             const MaterialPtr& getMaterial(void) const;
    00429             void getRenderOperation(RenderOperation& op);
    00431             void getWorldTransforms(Matrix4* xform) const;
    00433             Real getSquaredViewDepth(const Ogre::Camera *) const;
    00435             const LightList &getLights(void) const;
    00436
    00437
    00438
    00439         };
    00441         class _OgreExport ManualObjectSectionShadowRenderable : public ShadowRenderable
    00442         {
    00443         protected:
    00444             ManualObject* mParent;
    00445             // Shared link to position buffer
    00446             HardwareVertexBufferSharedPtr mPositionBuffer;
    00447             // Shared link to w-coord buffer (optional)
    00448             HardwareVertexBufferSharedPtr mWBuffer;
    00449
    00450         public:
    00451             ManualObjectSectionShadowRenderable(ManualObject* parent,
    00452                 HardwareIndexBufferSharedPtr* indexBuffer, const VertexData* vertexData,
    00453                 bool createSeparateLightCap, bool isLightCap = false);
    00454             ~ManualObjectSectionShadowRenderable();
    00456             void getWorldTransforms(Matrix4* xform) const;
    00457             HardwareVertexBufferSharedPtr getPositionBuffer(void) { return mPositionBuffer; }
    00458             HardwareVertexBufferSharedPtr getWBuffer(void) { return mWBuffer; }
    00459
    00460         };
    00461
    00462         typedef vector<ManualObjectSection*>::type SectionList;
    00463
    00465         void visitRenderables(Renderable::Visitor* visitor,
    00466             bool debugRenderables = false);
    00467
    00468
    00469     protected:
    00471         bool mDynamic;
    00473         SectionList mSectionList;
    00475         ManualObjectSection* mCurrentSection;
    00477         bool mCurrentUpdating;
    00479         struct TempVertex
    00480         {
    00481             Vector3 position;
    00482             Vector3 normal;
    00483             Vector3 tangent;
    00484             Vector4 texCoord[OGRE_MAX_TEXTURE_COORD_SETS];
    00485             ushort texCoordDims[OGRE_MAX_TEXTURE_COORD_SETS];
    00486             ColourValue colour;
    00487         };
    00489         TempVertex mTempVertex;
    00491         bool mFirstVertex;
    00493         bool mTempVertexPending;
    00495         char* mTempVertexBuffer;
    00497         size_t mTempVertexSize;
    00499         uint32* mTempIndexBuffer;
    00501         size_t mTempIndexSize;
    00503         size_t mDeclSize;
    00505         size_t mEstVertexCount;
    00507         size_t mEstIndexCount;
    00509         ushort mTexCoordIndex;
    00511         AxisAlignedBox mAABB;
    00513         Real mRadius;
    00515         bool mAnyIndexed;
    00517         EdgeData* mEdgeList;
    00519         ShadowRenderableList mShadowRenderables;
    00521         bool mUseIdentityProjection;
    00523         bool mUseIdentityView;
    00525         bool mKeepDeclarationOrder;
    00526
    00527
    00529         virtual void resetTempAreas(void);
    00531         virtual void resizeTempVertexBufferIfNeeded(size_t numVerts);
    00533         virtual void resizeTempIndexBufferIfNeeded(size_t numInds);
    00534
    00536         virtual void copyTempVertexToBuffer(void);
    00537
    00538     };
    00539
    00540
    00542     class _OgreExport ManualObjectFactory : public MovableObjectFactory
    00543     {
    00544     protected:
    00545         MovableObject* createInstanceImpl( const String& name, const NameValuePairList* params);
    00546     public:
    00547         ManualObjectFactory() {}
    00548         ~ManualObjectFactory() {}
    00549
    00550         static String FACTORY_TYPE_NAME;
    00551
    00552         const String& getType(void) const;
    00553         void destroyInstance( MovableObject* obj);
    00554
    00555     };
    00558 }
    00559
    00560 #endif
    00561
    00562

Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Wed Nov 3 2010 19:24:51