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

OgreCamera.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://ogre.sourceforge.net/
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 #ifndef __Camera_H__
00026 #define __Camera_H__
00027 
00028 // Default options
00029 #include "OgrePrerequisites.h"
00030 
00031 #include "OgreString.h"
00032 #include "OgreMovableObject.h"
00033 
00034 // Matrices & Vectors
00035 #include "OgreMatrix4.h"
00036 #include "OgreVector3.h"
00037 #include "OgrePlane.h"
00038 #include "OgreQuaternion.h"
00039 #include "OgreCommon.h"
00040 #include "OgreFrustum.h"
00041 #include "OgreRay.h"
00042 
00043 
00044 namespace Ogre {
00045 
00046 
00047 
00076     class _OgreExport Camera : public Frustum
00077     {
00078     protected:
00080         String mName;
00082         SceneManager *mSceneMgr;
00083 
00085         Quaternion mOrientation;
00086 
00088         Vector3 mPosition;
00089 
00091         mutable Quaternion mDerivedOrientation;
00092         mutable Vector3 mDerivedPosition;
00093 
00095         bool mYawFixed;
00097         Vector3 mYawFixedAxis;
00098 
00100         SceneDetailLevel mSceneDetail;
00101 
00103         unsigned int mVisFacesLastRender;
00104 
00106         static String msMovableType;
00107 
00109         SceneNode* mAutoTrackTarget;
00111         Vector3 mAutoTrackOffset;
00112 
00113         // Scene LOD factor used to adjust overall LOD
00114         Real mSceneLodFactor;
00116         Real mSceneLodFactorInv;
00117 
00118 
00123         Real mWLeft, mWTop, mWRight, mWBottom;
00125         bool mWindowSet;
00127         mutable std::vector<Plane> mWindowClipPlanes;
00128         // Was viewing window changed.
00129         mutable bool mRecalcWindow;
00131         Viewport* mLastViewport;
00135         bool mAutoAspectRatio;
00136 
00137         // Internal functions for calcs
00138         void updateFrustum(void) const;
00139         void updateView(void) const;
00140         bool isViewOutOfDate(void) const;
00142         void invalidateFrustum(void) const;
00144         void invalidateView(void) const;
00145 
00146 
00151         virtual void setWindowImpl(void) const;
00153         const Vector3& getPositionForViewUpdate(void) const;
00155         const Quaternion& getOrientationForViewUpdate(void) const;
00156 
00157 
00158     public:
00161         Camera( const String& name, SceneManager* sm);
00162 
00165         virtual ~Camera();
00166 
00167 
00170         SceneManager* getSceneManager(void) const;
00171 
00174         virtual const String& getName(void) const;
00175 
00176 
00184         void setDetailLevel(SceneDetailLevel sd);
00185 
00188         SceneDetailLevel getDetailLevel(void) const;
00189 
00192         void setPosition(Real x, Real y, Real z);
00193 
00196         void setPosition(const Vector3& vec);
00197 
00200         const Vector3& getPosition(void) const;
00201 
00204         void move(const Vector3& vec);
00205 
00208         void moveRelative(const Vector3& vec);
00209 
00215         void setDirection(Real x, Real y, Real z);
00216 
00219         void setDirection(const Vector3& vec);
00220 
00221         /* Gets the camera's direction.
00222         */
00223         Vector3 getDirection(void) const;
00224 
00227         Vector3 getUp(void) const;
00228 
00231         Vector3 getRight(void) const;
00232 
00241         void lookAt( const Vector3& targetPoint );
00254         void lookAt(Real x, Real y, Real z);
00255 
00258         void roll(const Radian& angle);
00259 #ifndef OGRE_FORCE_ANGLE_TYPES
00260         void roll(Real degrees) { roll ( Angle(degrees) ); }
00261 #endif//OGRE_FORCE_ANGLE_TYPES
00262 
00265         void yaw(const Radian& angle);
00266 #ifndef OGRE_FORCE_ANGLE_TYPES
00267         void yaw(Real degrees) { yaw ( Angle(degrees) ); }
00268 #endif//OGRE_FORCE_ANGLE_TYPES
00269 
00272         void pitch(const Radian& angle);
00273 #ifndef OGRE_FORCE_ANGLE_TYPES
00274         void pitch(Real degrees) { pitch ( Angle(degrees) ); }
00275 #endif//OGRE_FORCE_ANGLE_TYPES
00276 
00279         void rotate(const Vector3& axis, const Radian& angle);
00280 #ifndef OGRE_FORCE_ANGLE_TYPES
00281         void rotate(const Vector3& axis, Real degrees) { rotate ( axis, Angle(degrees) ); }
00282 #endif//OGRE_FORCE_ANGLE_TYPES
00283 
00286         void rotate(const Quaternion& q);
00287 
00307         void setFixedYawAxis( bool useFixed, const Vector3& fixedAxis = Vector3::UNIT_Y );
00308 
00309 
00312         const Quaternion& getOrientation(void) const;
00313 
00316         void setOrientation(const Quaternion& q);
00317 
00322         void _renderScene(Viewport *vp, bool includeOverlays);
00323 
00326         friend std::ostream& operator<<(std::ostream& o, Camera& c);
00327 
00330         void _notifyRenderedFaces(unsigned int numfaces);
00331 
00334         unsigned int _getNumRenderedFaces(void) const;
00335 
00338         const Quaternion& getDerivedOrientation(void) const;
00341         const Vector3& getDerivedPosition(void) const;
00344         Vector3 getDerivedDirection(void) const;
00347         Vector3 getDerivedUp(void) const;
00350         Vector3 getDerivedRight(void) const;
00351 
00353         const String& getMovableType(void) const;
00354 
00374         void setAutoTracking(bool enabled, SceneNode* target = 0, 
00375             const Vector3& offset = Vector3::ZERO);
00376 
00377 
00393         void setLodBias(Real factor = 1.0);
00394 
00399         Real getLodBias(void) const;
00400 
00401 
00402 
00407         Ray getCameraToViewportRay(Real screenx, Real screeny) const;
00408 
00410         Real _getLodBiasInverse(void) const;
00411 
00412 
00414         void _autoTrack(void);
00415 
00416 
00426         virtual void setWindow (Real Left, Real Top, Real Right, Real Bottom);
00428         virtual void resetWindow (void);
00430         virtual bool isWindowSet(void) const { return mWindowSet; }
00432         const std::vector<Plane>& getWindowPlanes(void) const;
00433 
00435         Real getBoundingRadius(void) const;
00437         SceneNode* getAutoTrackTarget(void) const { return mAutoTrackTarget; }
00439         const Vector3& getAutoTrackOffset(void) const { return mAutoTrackOffset; }
00440         
00446         Viewport* getViewport(void) const {return mLastViewport;}
00448         void _notifyViewport(Viewport* viewport) {mLastViewport = viewport;}
00449 
00457         void setAutoAspectRatio(bool autoratio);
00458 
00461         bool getAutoAspectRatio(void) const;
00462      };
00463 
00464 } // namespace Ogre
00465 #endif

Copyright © 2000-2005 by The OGRE Team
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Feb 12 12:59:42 2006