Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages

# OgreNode.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 © 2000-2002 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 #ifndef _Node_H__
    00026 #define _Node_H__
    00027
    00028 #include "OgrePrerequisites.h"
    00029
    00030 #include "OgreMatrix3.h"
    00031 #include "OgreMatrix4.h"
    00032 #include "OgreQuaternion.h"
    00033 #include "OgreString.h"
    00034 #include "OgreRenderable.h"
    00035 #include "OgreIteratorWrappers.h"
    00036
    00037 namespace Ogre {
    00038
    00039
    00050     class _OgreExport Node : public Renderable
    00051     {
    00052     public:
    00055         enum TransformSpace
    00056         {
    00058             TS_LOCAL,
    00060             TS_PARENT,
    00062             TS_WORLD
    00063         };
    00064         typedef HashMap<String, Node*> ChildNodeMap;
    00065         typedef MapIterator<ChildNodeMap> ChildNodeIterator;
    00066
    00067     protected:
    00069         Node* mParent;
    00071         ChildNodeMap mChildren;
    00072
    00073         typedef std::set<Node*> ChildUpdateSet;
    00075         mutable ChildUpdateSet mChildrenToUpdate;
    00077         mutable bool mNeedParentUpdate;
    00079         mutable bool mNeedChildUpdate;
    00081         mutable bool mParentNotified ;
    00082
    00084         String mName;
    00085
    00087         static unsigned long msNextGeneratedNameExt;
    00088
    00090         Quaternion mOrientation;
    00091
    00093         Vector3 mPosition;
    00094
    00096         Vector3 mScale;
    00097
    00099         bool mInheritScale;
    00100
    00102         void setParent(Node* parent);
    00103
    00111         mutable Quaternion mDerivedOrientation;
    00112
    00120         mutable Vector3 mDerivedPosition;
    00121
    00129         mutable Vector3 mDerivedScale;
    00130
    00137         virtual void _updateFromParent(void) const;
    00138
    00140         virtual Node* createChildImpl(void) = 0;
    00141
    00143         virtual Node* createChildImpl(const String& name) = 0;
    00144
    00151         void makeTransform(
    00152             const Vector3& position,
    00153             const Vector3& scale,
    00154             const Quaternion& orientation,
    00155             Matrix4& destMatrix ) const;
    00156
    00162         void makeInverseTransform(
    00163             const Vector3& position,
    00164             const Vector3& scale,
    00165             const Quaternion& orientation,
    00166             Matrix4& destMatrix );
    00167
    00169         Vector3 mInitialPosition;
    00171         Quaternion mInitialOrientation;
    00173         Vector3 mInitialScale;
    00174
    00175         // Weight of applied animations so far, used for blending
    00176         Real mAccumAnimWeight;
    00177         // The total weighted translation from the initial state so far
    00178         Vector3 mTransFromInitial;
    00179         // The total weighted rotation from the initial state so far
    00180         Quaternion mRotFromInitial;
    00181         // The total weighted scale from the initial state so far
    00182         Vector3 mScaleFromInitial;
    00183
    00185         mutable Matrix4 mCachedTransform;
    00186         mutable bool mCachedTransformOutOfDate;
    00187
    00188
    00189     public:
    00194         Node();
    00199         Node(const String& name);
    00200
    00201         virtual ~Node();
    00202
    00204         const String& getName(void) const;
    00205
    00208         virtual Node* getParent(void) const;
    00209
    00212         virtual const Quaternion & getOrientation() const;
    00213
    00216         virtual void setOrientation( const Quaternion& q );
    00217
    00220         virtual void setOrientation( Real w, Real x, Real y, Real z);
    00221
    00224         virtual void resetOrientation(void);
    00225
    00228         virtual void setPosition(const Vector3& pos);
    00229
    00232         virtual void setPosition(Real x, Real y, Real z);
    00233
    00236         virtual const Vector3 & getPosition(void) const;
    00237
    00251         virtual void setScale(const Vector3& scale);
    00252
    00266         virtual void setScale(Real x, Real y, Real z);
    00267
    00270         virtual const Vector3 & getScale(void) const;
    00271
    00285         virtual void setInheritScale(bool inherit);
    00286
    00291         virtual bool getInheritScale(void) const;
    00292
    00302         virtual void scale(const Vector3& scale);
    00303
    00313         virtual void scale(Real x, Real y, Real z);
    00314
    00324         virtual void translate(const Vector3& d, TransformSpace relativeTo = TS_PARENT);
    00338         virtual void translate(Real x, Real y, Real z, TransformSpace relativeTo = TS_PARENT);
    00358         virtual void translate(const Matrix3& axes, const Vector3& move, TransformSpace relativeTo = TS_PARENT);
    00378         virtual void translate(const Matrix3& axes, Real x, Real y, Real z, TransformSpace relativeTo = TS_PARENT);
    00379
    00382         virtual void roll(const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
    00383 #ifndef OGRE_FORCE_ANGLE_TYPES
    00384         inline void roll(Real degrees, TransformSpace relativeTo = TS_LOCAL) {
    00385             roll ( Angle(degrees), relativeTo );
    00386         }
    00387 #endif//OGRE_FORCE_ANGLE_TYPES
    00388
    00391         virtual void pitch(const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
    00392 #ifndef OGRE_FORCE_ANGLE_TYPES
    00393         inline void pitch(Real degrees, TransformSpace relativeTo = TS_LOCAL) {
    00394             pitch ( Angle(degrees), relativeTo );
    00395         }
    00396 #endif//OGRE_FORCE_ANGLE_TYPES
    00397
    00400         virtual void yaw(const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
    00401 #ifndef OGRE_FORCE_ANGLE_TYPES
    00402         inline void yaw(Real degrees, TransformSpace relativeTo = TS_LOCAL) {
    00403             yaw ( Angle(degrees), relativeTo );
    00404         }
    00405 #endif//OGRE_FORCE_ANGLE_TYPES
    00406
    00409         virtual void rotate(const Vector3& axis, const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
    00410 #ifndef OGRE_FORCE_ANGLE_TYPES
    00411         inline void rotate(const Vector3& axis, Real degrees, TransformSpace relativeTo = TS_LOCAL) {
    00412             rotate ( axis, Angle(degrees), relativeTo );
    00413         }
    00414 #endif//OGRE_FORCE_ANGLE_TYPES
    00415
    00418         virtual void rotate(const Quaternion& q, TransformSpace relativeTo = TS_LOCAL);
    00419
    00422         virtual Matrix3 getLocalAxes(void) const;
    00423
    00430         virtual Node* createChild(
    00431             const Vector3& translate = Vector3::ZERO,
    00432             const Quaternion& rotate = Quaternion::IDENTITY );
    00433
    00443         virtual Node* createChild(const String& name, const Vector3& translate = Vector3::ZERO, const Quaternion& rotate = Quaternion::IDENTITY);
    00444
    00448         virtual void addChild(Node* child);
    00449
    00452         virtual unsigned short numChildren(void) const;
    00453
    00458         virtual Node* getChild(unsigned short index) const;
    00459
    00462         virtual Node* getChild(const String& name) const;
    00463
    00474         virtual ChildNodeIterator getChildIterator(void);
    00475
    00483         virtual Node* removeChild(unsigned short index);
    00491         virtual Node* removeChild(Node* child);
    00492
    00498         virtual Node* removeChild(const String& name);
    00502         virtual void removeAllChildren(void);
    00503
    00506         virtual const Quaternion & _getDerivedOrientation(void) const;
    00507
    00510         virtual const Vector3 & _getDerivedPosition(void) const;
    00511
    00514         virtual const Vector3 & _getDerivedScale(void) const;
    00515
    00525         virtual Matrix4 _getFullTransform(void) const;
    00526
    00539         virtual void _update(bool updateChildren, bool parentHasChanged);
    00540
    00547         Material* getMaterial(void) const;
    00554         void getRenderOperation(RenderOperation& op);
    00561         void getWorldTransforms(Matrix4* xform) const;
    00563         const Quaternion& getWorldOrientation(void) const;
    00565         const Vector3& getWorldPosition(void) const;
    00566
    00577         virtual void setInitialState(void);
    00578
    00580         virtual void resetToInitialState(void);
    00581
    00586         virtual const Vector3& getInitialPosition(void) const;
    00587
    00589         virtual const Quaternion& getInitialOrientation(void) const;
    00590
    00592         virtual const Vector3& getInitialScale(void) const;
    00593
    00602         virtual void _weightedTransform(Real weight, const Vector3& translate,
    00603             const Quaternion& rotate, const Vector3& scale);
    00604
    00606         Real getSquaredViewDepth(const Camera* cam) const;
    00607
    00613         virtual void needUpdate();
    00615         virtual void requestUpdate(Node* child);
    00617         virtual void cancelUpdate(Node* child);
    00618
    00620         const LightList& getLights(void) const
    00621         {
    00622             // Nodes should not be lit by the scene, this will not get called
    00623             static LightList ll;
    00624             return ll;
    00625         }
    00626
    00627
    00628
    00629     };
    00630
    00631 } //namespace
    00632
    00633 #endif

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:36 2004