# 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-2005 The OGRE Team
    00008 Also see acknowledgements in Readme.html
    00009
    00010 This program is free software; you can redistribute it and/or modify it under
    00011 the terms of the GNU Lesser General Public License as published by the Free Software
    00012 Foundation; either version 2 of the License, or (at your option) any later
    00013 version.
    00014
    00015 This program is distributed in the hope that it will be useful, but WITHOUT
    00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    00018
    00019 You should have received a copy of the GNU Lesser General Public License along with
    00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
    00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
    00022 http://www.gnu.org/copyleft/lesser.txt.
    00023 -----------------------------------------------------------------------------
    00024 */
    00025
    00026 #ifndef __OgreManualObject_H__
    00027 #define __OgreManualObject_H__
    00028
    00029 #include "OgrePrerequisites.h"
    00030 #include "OgreMovableObject.h"
    00031 #include "OgreRenderable.h"
    00032 #include "OgreResourceGroupManager.h"
    00033
    00034
    00035 namespace Ogre
    00036 {
    00091     class _OgreExport ManualObject : public MovableObject
    00092     {
    00093     public:
    00094         ManualObject(const String& name);
    00095         virtual ~ManualObject();
    00096
    00104         virtual void clear(void);
    00105
    00111         virtual void estimateVertexCount(size_t vcount);
    00112
    00118         virtual void estimateIndexCount(size_t icount);
    00119
    00129         virtual void begin(const String& materialName,
    00130             RenderOperation::OperationType opType = RenderOperation::OT_TRIANGLE_LIST);
    00138         virtual void position(const Vector3& pos);
    00140         virtual void position(Real x, Real y, Real z);
    00141
    00147         virtual void normal(const Vector3& norm);
    00149         virtual void normal(Real x, Real y, Real z);
    00150
    00159         virtual void textureCoord(Real u);
    00161         virtual void textureCoord(Real u, Real v);
    00163         virtual void textureCoord(Real u, Real v, Real w);
    00165         virtual void textureCoord(const Vector2& uv);
    00167         virtual void textureCoord(const Vector3& uvw);
    00168
    00171         virtual void colour(const ColourValue& col);
    00175         virtual void colour(Real r, Real g, Real b, Real a = 1.0f);
    00176
    00188         virtual void index(uint16 idx);
    00197         virtual void triangle(uint16 i1, uint16 i2, uint16 i3);
    00206         virtual void quad(uint16 i1, uint16 i2, uint16 i3, uint16 i4);
    00207
    00209         virtual void end(void);
    00210
    00222         virtual MeshPtr convertToMesh(const String& meshName,
    00223             const String& groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
    00224
    00225         // MovableObject overrides
    00226
    00228         const String& getMovableType(void) const;
    00230         const AxisAlignedBox& getBoundingBox(void) const;
    00232         Real getBoundingRadius(void) const;
    00234         void _updateRenderQueue(RenderQueue* queue);
    00236         EdgeData* getEdgeList(void);
    00238         ShadowRenderableListIterator getShadowVolumeRenderableIterator(
    00239             ShadowTechnique shadowTechnique, const Light* light,
    00240             HardwareIndexBufferSharedPtr* indexBuffer,
    00241             bool extrudeVertices, Real extrusionDist, unsigned long flags = 0);
    00242
    00243
    00245         class _OgreExport ManualObjectSection : public Renderable
    00246         {
    00247         protected:
    00248             ManualObject* mParent;
    00249             String mMaterialName;
    00250             mutable MaterialPtr mMaterial;
    00251             RenderOperation mRenderOperation;
    00252
    00253         public:
    00254             ManualObjectSection(ManualObject* parent, const String& materialName,
    00255                 RenderOperation::OperationType opType);
    00256             virtual ~ManualObjectSection();
    00257
    00259             RenderOperation* getRenderOperation(void);
    00261             const String& getMaterialName(void) const { return mMaterialName; }
    00262
    00263             // Renderable overrides
    00265             const MaterialPtr& getMaterial(void) const;
    00267             void getRenderOperation(RenderOperation& op);
    00269             void getWorldTransforms(Matrix4* xform) const;
    00271             const Quaternion& getWorldOrientation(void) const;
    00273             const Vector3& getWorldPosition(void) const;
    00275             Real getSquaredViewDepth(const Ogre::Camera *) const;
    00277             const LightList &getLights(void) const;
    00278
    00279         };
    00281         class _OgreExport ManualObjectSectionShadowRenderable : public ShadowRenderable
    00282         {
    00283         protected:
    00284             ManualObject* mParent;
    00285             // Shared link to position buffer
    00286             HardwareVertexBufferSharedPtr mPositionBuffer;
    00287             // Shared link to w-coord buffer (optional)
    00288             HardwareVertexBufferSharedPtr mWBuffer;
    00289
    00290         public:
    00291             ManualObjectSectionShadowRenderable(ManualObject* parent,
    00292                 HardwareIndexBufferSharedPtr* indexBuffer, const VertexData* vertexData,
    00293                 bool createSeparateLightCap, bool isLightCap = false);
    00294             ~ManualObjectSectionShadowRenderable();
    00296             void getWorldTransforms(Matrix4* xform) const;
    00298             const Quaternion& getWorldOrientation(void) const;
    00300             const Vector3& getWorldPosition(void) const;
    00301             HardwareVertexBufferSharedPtr getPositionBuffer(void) { return mPositionBuffer; }
    00302             HardwareVertexBufferSharedPtr getWBuffer(void) { return mWBuffer; }
    00303
    00304         };
    00305
    00306         typedef std::vector<ManualObjectSection*> SectionList;
    00307
    00308     protected:
    00310         SectionList mSectionList;
    00312         ManualObjectSection* mCurrentSection;
    00314         struct TempVertex
    00315         {
    00316             Vector3 position;
    00317             Vector3 normal;
    00318             Vector3 texCoord[OGRE_MAX_TEXTURE_COORD_SETS];
    00319             ushort texCoordDims[OGRE_MAX_TEXTURE_COORD_SETS];
    00320             ColourValue colour;
    00321         };
    00323         TempVertex mTempVertex;
    00325         bool mFirstVertex;
    00327         bool mTempVertexPending;
    00329         char* mTempVertexBuffer;
    00331         size_t mTempVertexSize;
    00333         uint16* mTempIndexBuffer;
    00335         size_t mTempIndexSize;
    00337         size_t mDeclSize;
    00339         ushort mTexCoordIndex;
    00341         AxisAlignedBox mAABB;
    00343         Real mRadius;
    00345         bool mAnyIndexed;
    00347         EdgeData* mEdgeList;
    00349         ShadowRenderableList mShadowRenderables;
    00350
    00351
    00353         virtual void resetTempAreas(void);
    00355         virtual void resizeTempVertexBufferIfNeeded(size_t numVerts);
    00357         virtual void resizeTempIndexBufferIfNeeded(size_t numInds);
    00358
    00360         virtual void copyTempVertexToBuffer(void);
    00361
    00362     };
    00363
    00364
    00366     class _OgreExport ManualObjectFactory : public MovableObjectFactory
    00367     {
    00368     protected:
    00369         MovableObject* createInstanceImpl( const String& name, const NameValuePairList* params);
    00370     public:
    00371         ManualObjectFactory() {}
    00372         ~ManualObjectFactory() {}
    00373
    00374         static String FACTORY_TYPE_NAME;
    00375
    00376         const String& getType(void) const;
    00377         void destroyInstance( MovableObject* obj);
    00378
    00379     };
    00380 }
    00381
    00382 #endif
    00383

Copyright © 2000-2005 by The OGRE Team
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 17 15:39:09 2006