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://www.ogre3d.org
00006 
00007 Copyright (c) 2000-2006 Torus Knot Software Ltd
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 You may alternatively use this source under the terms of a specific version of
00025 the OGRE Unrestricted License provided you have obtained such a license from
00026 Torus Knot Software Ltd.
00027 -----------------------------------------------------------------------------
00028 */
00029 #ifndef __Camera_H__
00030 #define __Camera_H__
00031 
00032 // Default options
00033 #include "OgrePrerequisites.h"
00034 
00035 #include "OgreString.h"
00036 #include "OgreMovableObject.h"
00037 
00038 // Matrices & Vectors
00039 #include "OgreMatrix4.h"
00040 #include "OgreVector3.h"
00041 #include "OgrePlane.h"
00042 #include "OgreQuaternion.h"
00043 #include "OgreCommon.h"
00044 #include "OgreFrustum.h"
00045 #include "OgreRay.h"
00046 #include "OgrePlaneBoundedVolume.h"
00047 
00048 
00049 namespace Ogre {
00050 
00051 
00052 
00081     class _OgreExport Camera : public Frustum
00082     {
00083     protected:
00085         String mName;
00087         SceneManager *mSceneMgr;
00088 
00090         Quaternion mOrientation;
00091 
00093         Vector3 mPosition;
00094 
00096         mutable Quaternion mDerivedOrientation;
00097         mutable Vector3 mDerivedPosition;
00098 
00100         mutable Quaternion mRealOrientation;
00101         mutable Vector3 mRealPosition;
00102 
00104         bool mYawFixed;
00106         Vector3 mYawFixedAxis;
00107 
00109         PolygonMode mSceneDetail;
00110 
00112         unsigned int mVisFacesLastRender;
00113 
00115         unsigned int mVisBatchesLastRender;
00116 
00118         static String msMovableType;
00119 
00121         SceneNode* mAutoTrackTarget;
00123         Vector3 mAutoTrackOffset;
00124 
00125         // Scene LOD factor used to adjust overall LOD
00126         Real mSceneLodFactor;
00128         Real mSceneLodFactorInv;
00129 
00130 
00135         Real mWLeft, mWTop, mWRight, mWBottom;
00137         bool mWindowSet;
00139         mutable std::vector<Plane> mWindowClipPlanes;
00140         // Was viewing window changed.
00141         mutable bool mRecalcWindow;
00143         Viewport* mLastViewport;
00147         bool mAutoAspectRatio;
00149         Frustum *mCullFrustum;
00151         bool mUseRenderingDistance;
00153         const Camera* mLodCamera;
00154 
00155 
00156         // Internal functions for calcs
00157         bool isViewOutOfDate(void) const;
00159         void invalidateFrustum(void) const;
00161         void invalidateView(void) const;
00162 
00163 
00168         virtual void setWindowImpl(void) const;
00169 
00171         virtual std::vector<Vector4> getRayForwardIntersect(const Vector3& anchor, const Vector3 *dir, Real planeOffset) const;
00172 
00173     public:
00176         Camera( const String& name, SceneManager* sm);
00177 
00180         virtual ~Camera();
00181 
00182 
00185         SceneManager* getSceneManager(void) const;
00186 
00189         virtual const String& getName(void) const;
00190 
00191 
00199         void setPolygonMode(PolygonMode sd);
00200 
00203         PolygonMode getPolygonMode(void) const;
00204 
00207         void setPosition(Real x, Real y, Real z);
00208 
00211         void setPosition(const Vector3& vec);
00212 
00215         const Vector3& getPosition(void) const;
00216 
00219         void move(const Vector3& vec);
00220 
00223         void moveRelative(const Vector3& vec);
00224 
00230         void setDirection(Real x, Real y, Real z);
00231 
00234         void setDirection(const Vector3& vec);
00235 
00236         /* Gets the camera's direction.
00237         */
00238         Vector3 getDirection(void) const;
00239 
00242         Vector3 getUp(void) const;
00243 
00246         Vector3 getRight(void) const;
00247 
00256         void lookAt( const Vector3& targetPoint );
00269         void lookAt(Real x, Real y, Real z);
00270 
00273         void roll(const Radian& angle);
00274 
00277         void yaw(const Radian& angle);
00278 
00281         void pitch(const Radian& angle);
00282 
00285         void rotate(const Vector3& axis, const Radian& angle);
00286 
00289         void rotate(const Quaternion& q);
00290 
00310         void setFixedYawAxis( bool useFixed, const Vector3& fixedAxis = Vector3::UNIT_Y );
00311 
00312 
00315         const Quaternion& getOrientation(void) const;
00316 
00319         void setOrientation(const Quaternion& q);
00320 
00325         void _renderScene(Viewport *vp, bool includeOverlays);
00326 
00329         _OgreExport friend std::ostream& operator<<(std::ostream& o, const Camera& c);
00330 
00333         void _notifyRenderedFaces(unsigned int numfaces);
00334 
00337         void _notifyRenderedBatches(unsigned int numbatches);
00338 
00341         unsigned int _getNumRenderedFaces(void) const;
00342 
00345         unsigned int _getNumRenderedBatches(void) const;
00346 
00349         const Quaternion& getDerivedOrientation(void) const;
00352         const Vector3& getDerivedPosition(void) const;
00355         Vector3 getDerivedDirection(void) const;
00358         Vector3 getDerivedUp(void) const;
00361         Vector3 getDerivedRight(void) const;
00362 
00365         const Quaternion& getRealOrientation(void) const;
00368         const Vector3& getRealPosition(void) const;
00371         Vector3 getRealDirection(void) const;
00374         Vector3 getRealUp(void) const;
00377         Vector3 getRealRight(void) const;
00378 
00380         const String& getMovableType(void) const;
00381 
00401         void setAutoTracking(bool enabled, SceneNode* target = 0, 
00402             const Vector3& offset = Vector3::ZERO);
00403 
00404 
00420         void setLodBias(Real factor = 1.0);
00421 
00426         Real getLodBias(void) const;
00427 
00440         virtual void setLodCamera(const Camera* lodCam);
00441 
00448         virtual const Camera* getLodCamera() const;
00449 
00450 
00455         Ray getCameraToViewportRay(Real screenx, Real screeny) const;
00461         void getCameraToViewportRay(Real screenx, Real screeny, Ray* outRay) const;
00462 
00473         PlaneBoundedVolume getCameraToViewportBoxVolume(Real screenLeft, 
00474             Real screenTop, Real screenRight, Real screenBottom, bool includeFarPlane = false);
00475 
00487         void getCameraToViewportBoxVolume(Real screenLeft, 
00488             Real screenTop, Real screenRight, Real screenBottom, 
00489             PlaneBoundedVolume* outVolume, bool includeFarPlane = false);
00490 
00492         Real _getLodBiasInverse(void) const;
00493 
00494 
00496         void _autoTrack(void);
00497 
00498 
00508         virtual void setWindow (Real Left, Real Top, Real Right, Real Bottom);
00510         virtual void resetWindow (void);
00512         virtual bool isWindowSet(void) const { return mWindowSet; }
00514         const std::vector<Plane>& getWindowPlanes(void) const;
00515 
00517         Real getBoundingRadius(void) const;
00519         SceneNode* getAutoTrackTarget(void) const { return mAutoTrackTarget; }
00521         const Vector3& getAutoTrackOffset(void) const { return mAutoTrackOffset; }
00522         
00528         Viewport* getViewport(void) const {return mLastViewport;}
00530         void _notifyViewport(Viewport* viewport) {mLastViewport = viewport;}
00531 
00539         void setAutoAspectRatio(bool autoratio);
00540 
00543         bool getAutoAspectRatio(void) const;
00544 
00556         void setCullingFrustum(Frustum* frustum) { mCullFrustum = frustum; }
00558         Frustum* getCullingFrustum(void) const { return mCullFrustum; }
00559 
00564         virtual void forwardIntersect(const Plane& worldPlane, std::vector<Vector4>* intersect3d) const;
00565 
00567         bool isVisible(const AxisAlignedBox& bound, FrustumPlane* culledBy = 0) const;
00569         bool isVisible(const Sphere& bound, FrustumPlane* culledBy = 0) const;
00571         bool isVisible(const Vector3& vert, FrustumPlane* culledBy = 0) const;
00573         const Vector3* getWorldSpaceCorners(void) const;
00575         const Plane& getFrustumPlane( unsigned short plane ) const;
00577         bool projectSphere(const Sphere& sphere, 
00578             Real* left, Real* top, Real* right, Real* bottom) const;
00580         Real getNearClipDistance(void) const;
00582         Real getFarClipDistance(void) const;
00584         const Matrix4& getViewMatrix(void) const;
00593         const Matrix4& getViewMatrix(bool ownFrustumOnly) const;
00599         virtual void setUseRenderingDistance(bool use) { mUseRenderingDistance = use; }
00603         virtual bool getUseRenderingDistance(void) const { return mUseRenderingDistance; }
00604 
00611         virtual void synchroniseBaseSettingsWith(const Camera* cam);
00612 
00614         const Vector3& getPositionForViewUpdate(void) const;
00616         const Quaternion& getOrientationForViewUpdate(void) const;
00617      };
00618 
00619 } // namespace Ogre
00620 #endif

Copyright © 2008 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 27 22:02:22 2009