OgreSceneNode.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-2012 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 #ifndef _SceneNode_H__
00029 #define _SceneNode_H__
00030 
00031 #include "OgrePrerequisites.h"
00032 
00033 #include "OgreNode.h"
00034 #include "OgreIteratorWrappers.h"
00035 #include "OgreAxisAlignedBox.h"
00036 
00037 namespace Ogre {
00038 
00039     // forward decl
00040     struct VisibleObjectsBoundsInfo;
00041 
00057     class _OgreExport SceneNode : public Node
00058     {
00059     public:
00060         typedef HashMap<String, MovableObject*> ObjectMap;
00061         typedef MapIterator<ObjectMap> ObjectIterator;
00062         typedef ConstMapIterator<ObjectMap> ConstObjectIterator;
00063 
00064     protected:
00065         ObjectMap mObjectsByName;
00066 
00068         WireBoundingBox *mWireBoundingBox;
00070         bool mShowBoundingBox;
00071         bool mHideBoundingBox;
00072 
00074         SceneManager* mCreator;
00075 
00077         AxisAlignedBox mWorldAABB;
00078 
00080         void updateFromParentImpl(void) const;
00081 
00083         Node* createChildImpl(void);
00084 
00086         Node* createChildImpl(const String& name);
00087 
00089         void setParent(Node* parent);
00090 
00094         virtual void setInSceneGraph(bool inGraph);
00095 
00097         bool mYawFixed;
00099         Vector3 mYawFixedAxis;
00100 
00102         SceneNode* mAutoTrackTarget;
00104         Vector3 mAutoTrackOffset;
00106         Vector3 mAutoTrackLocalDirection;
00108         bool mIsInSceneGraph;
00109     public:
00114         SceneNode(SceneManager* creator);
00119         SceneNode(SceneManager* creator, const String& name);
00120         ~SceneNode();
00121 
00127         virtual void attachObject(MovableObject* obj);
00128 
00131         virtual unsigned short numAttachedObjects(void) const;
00132 
00137         virtual MovableObject* getAttachedObject(unsigned short index);
00138 
00142         virtual MovableObject* getAttachedObject(const String& name);
00143 
00149         virtual MovableObject* detachObject(unsigned short index);
00151         virtual void detachObject(MovableObject* obj);
00152 
00154         virtual MovableObject* detachObject(const String& name);
00155 
00158         virtual void detachAllObjects(void);
00159 
00163         virtual bool isInSceneGraph(void) const { return mIsInSceneGraph; }
00164 
00169         virtual void _notifyRootNode(void) { mIsInSceneGraph = true; }
00170             
00171 
00184         virtual void _update(bool updateChildren, bool parentHasChanged);
00185 
00188         virtual void _updateBounds(void);
00189 
00208         virtual void _findVisibleObjects(Camera* cam, RenderQueue* queue, 
00209             VisibleObjectsBoundsInfo* visibleBounds, 
00210             bool includeChildren = true, bool displayNodes = false, bool onlyShadowCasters = false);
00211 
00217         virtual const AxisAlignedBox& _getWorldAABB(void) const;
00218 
00229         virtual ObjectIterator getAttachedObjectIterator(void);
00240         virtual ConstObjectIterator getAttachedObjectIterator(void) const;
00241 
00247         SceneManager* getCreator(void) const { return mCreator; }
00248 
00259         virtual void removeAndDestroyChild(const String& name);
00260 
00271         virtual void removeAndDestroyChild(unsigned short index);
00272 
00279         virtual void removeAndDestroyAllChildren(void);
00280 
00285         virtual void showBoundingBox(bool bShow);
00286 
00292         virtual void hideBoundingBox(bool bHide);
00293 
00296         virtual void _addBoundingBoxToQueue(RenderQueue* queue);
00297 
00305         virtual bool getShowBoundingBox() const;
00306 
00313         virtual SceneNode* createChildSceneNode(
00314             const Vector3& translate = Vector3::ZERO, 
00315             const Quaternion& rotate = Quaternion::IDENTITY );
00316 
00326         virtual SceneNode* createChildSceneNode(const String& name, const Vector3& translate = Vector3::ZERO, const Quaternion& rotate = Quaternion::IDENTITY);
00327 
00344         virtual void findLights(LightList& destList, Real radius, uint32 lightMask = 0xFFFFFFFF) const;
00345 
00360         virtual void setFixedYawAxis( bool useFixed, const Vector3& fixedAxis = Vector3::UNIT_Y );
00361 
00364         virtual void yaw(const Radian& angle, TransformSpace relativeTo = TS_LOCAL);
00375         virtual void setDirection(Real x, Real y, Real z, 
00376             TransformSpace relativeTo = TS_LOCAL, 
00377             const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
00378 
00389         virtual void setDirection(const Vector3& vec, TransformSpace relativeTo = TS_LOCAL, 
00390             const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
00397         virtual void lookAt( const Vector3& targetPoint, TransformSpace relativeTo,
00398             const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
00417         virtual void setAutoTracking(bool enabled, SceneNode* const target = 0, 
00418             const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z,
00419             const Vector3& offset = Vector3::ZERO);
00421         virtual SceneNode* getAutoTrackTarget(void) { return mAutoTrackTarget; }
00423         virtual const Vector3& getAutoTrackOffset(void) { return mAutoTrackOffset; }
00425         virtual const Vector3& getAutoTrackLocalDirection(void) { return mAutoTrackLocalDirection; }
00427         void _autoTrack(void);
00429         SceneNode* getParentSceneNode(void) const;
00438         virtual void setVisible(bool visible, bool cascade = true);
00446         virtual void flipVisibility(bool cascade = true);
00447 
00457         virtual void setDebugDisplayEnabled(bool enabled, bool cascade = true);
00458 
00460         virtual DebugRenderable* getDebugRenderable();
00461 
00462 
00463 
00464 
00465     };
00470 }// namespace
00471 
00472 #endif

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Fri May 25 23:36:26 2012