# 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-2009 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 __Camera_H__
    00029 #define __Camera_H__
    00030
    00031 // Default options
    00032 #include "OgrePrerequisites.h"
    00033
    00034 #include "OgreString.h"
    00035 #include "OgreMovableObject.h"
    00036
    00037 // Matrices & Vectors
    00038 #include "OgreMatrix4.h"
    00039 #include "OgreVector3.h"
    00040 #include "OgrePlane.h"
    00041 #include "OgreQuaternion.h"
    00042 #include "OgreCommon.h"
    00043 #include "OgreFrustum.h"
    00044 #include "OgreRay.h"
    00045 #include "OgrePlaneBoundedVolume.h"
    00046
    00047
    00048 namespace Ogre {
    00049
    00085     class _OgreExport Camera : public Frustum
    00086     {
    00087     public:
    00090         class _OgreExport Listener
    00091         {
    00092         public:
    00093             Listener() {}
    00094             virtual ~Listener() {}
    00095
    00097             virtual void cameraPreRenderScene(Camera* cam)
    00098                         { (void)cam; }
    00099
    00101             virtual void cameraPostRenderScene(Camera* cam)
    00102                         { (void)cam; }
    00103
    00105             virtual void cameraDestroyed(Camera* cam)
    00106                         { (void)cam; }
    00107
    00108         };
    00109     protected:
    00111         SceneManager *mSceneMgr;
    00112
    00114         Quaternion mOrientation;
    00115
    00117         Vector3 mPosition;
    00118
    00120         mutable Quaternion mDerivedOrientation;
    00121         mutable Vector3 mDerivedPosition;
    00122
    00124         mutable Quaternion mRealOrientation;
    00125         mutable Vector3 mRealPosition;
    00126
    00128         bool mYawFixed;
    00130         Vector3 mYawFixedAxis;
    00131
    00133         PolygonMode mSceneDetail;
    00134
    00136         unsigned int mVisFacesLastRender;
    00137
    00139         unsigned int mVisBatchesLastRender;
    00140
    00142         static String msMovableType;
    00143
    00145         SceneNode* mAutoTrackTarget;
    00147         Vector3 mAutoTrackOffset;
    00148
    00149         // Scene LOD factor used to adjust overall LOD
    00150         Real mSceneLodFactor;
    00152         Real mSceneLodFactorInv;
    00153
    00154
    00159         Real mWLeft, mWTop, mWRight, mWBottom;
    00161         bool mWindowSet;
    00163         mutable vector<Plane>::type mWindowClipPlanes;
    00164         // Was viewing window changed.
    00165         mutable bool mRecalcWindow;
    00167         Viewport* mLastViewport;
    00171         bool mAutoAspectRatio;
    00173         Frustum *mCullFrustum;
    00175         bool mUseRenderingDistance;
    00177         const Camera* mLodCamera;
    00178
    00179         typedef vector<Listener*>::type ListenerList;
    00180         ListenerList mListeners;
    00181
    00182
    00183         // Internal functions for calcs
    00184         bool isViewOutOfDate(void) const;
    00186         void invalidateFrustum(void) const;
    00188         void invalidateView(void) const;
    00189
    00190
    00195         virtual void setWindowImpl(void) const;
    00196
    00198         virtual vector<Vector4>::type getRayForwardIntersect(const Vector3& anchor, const Vector3 *dir, Real planeOffset) const;
    00199
    00200     public:
    00203         Camera( const String& name, SceneManager* sm);
    00204
    00207         virtual ~Camera();
    00208
    00210         virtual void addListener(Listener* l);
    00212         virtual void removeListener(Listener* l);
    00213
    00216         SceneManager* getSceneManager(void) const;
    00217
    00225         void setPolygonMode(PolygonMode sd);
    00226
    00229         PolygonMode getPolygonMode(void) const;
    00230
    00233         void setPosition(Real x, Real y, Real z);
    00234
    00237         void setPosition(const Vector3& vec);
    00238
    00241         const Vector3& getPosition(void) const;
    00242
    00245         void move(const Vector3& vec);
    00246
    00249         void moveRelative(const Vector3& vec);
    00250
    00256         void setDirection(Real x, Real y, Real z);
    00257
    00260         void setDirection(const Vector3& vec);
    00261
    00262         /* Gets the camera's direction.
    00263         */
    00264         Vector3 getDirection(void) const;
    00265
    00268         Vector3 getUp(void) const;
    00269
    00272         Vector3 getRight(void) const;
    00273
    00282         void lookAt( const Vector3& targetPoint );
    00295         void lookAt(Real x, Real y, Real z);
    00296
    00299         void roll(const Radian& angle);
    00300
    00303         void yaw(const Radian& angle);
    00304
    00307         void pitch(const Radian& angle);
    00308
    00311         void rotate(const Vector3& axis, const Radian& angle);
    00312
    00315         void rotate(const Quaternion& q);
    00316
    00336         void setFixedYawAxis( bool useFixed, const Vector3& fixedAxis = Vector3::UNIT_Y );
    00337
    00338
    00341         const Quaternion& getOrientation(void) const;
    00342
    00345         void setOrientation(const Quaternion& q);
    00346
    00351         void _renderScene(Viewport *vp, bool includeOverlays);
    00352
    00355         _OgreExport friend std::ostream& operator<<(std::ostream& o, const Camera& c);
    00356
    00359         void _notifyRenderedFaces(unsigned int numfaces);
    00360
    00363         void _notifyRenderedBatches(unsigned int numbatches);
    00364
    00367         unsigned int _getNumRenderedFaces(void) const;
    00368
    00371         unsigned int _getNumRenderedBatches(void) const;
    00372
    00375         const Quaternion& getDerivedOrientation(void) const;
    00378         const Vector3& getDerivedPosition(void) const;
    00381         Vector3 getDerivedDirection(void) const;
    00384         Vector3 getDerivedUp(void) const;
    00387         Vector3 getDerivedRight(void) const;
    00388
    00391         const Quaternion& getRealOrientation(void) const;
    00394         const Vector3& getRealPosition(void) const;
    00397         Vector3 getRealDirection(void) const;
    00400         Vector3 getRealUp(void) const;
    00403         Vector3 getRealRight(void) const;
    00404
    00406         const String& getMovableType(void) const;
    00407
    00427         void setAutoTracking(bool enabled, SceneNode* target = 0,
    00428             const Vector3& offset = Vector3::ZERO);
    00429
    00430
    00446         void setLodBias(Real factor = 1.0);
    00447
    00452         Real getLodBias(void) const;
    00453
    00466         virtual void setLodCamera(const Camera* lodCam);
    00467
    00474         virtual const Camera* getLodCamera() const;
    00475
    00476
    00481         Ray getCameraToViewportRay(Real screenx, Real screeny) const;
    00487         void getCameraToViewportRay(Real screenx, Real screeny, Ray* outRay) const;
    00488
    00499         PlaneBoundedVolume getCameraToViewportBoxVolume(Real screenLeft,
    00500             Real screenTop, Real screenRight, Real screenBottom, bool includeFarPlane = false);
    00501
    00513         void getCameraToViewportBoxVolume(Real screenLeft,
    00514             Real screenTop, Real screenRight, Real screenBottom,
    00515             PlaneBoundedVolume* outVolume, bool includeFarPlane = false);
    00516
    00518         Real _getLodBiasInverse(void) const;
    00519
    00520
    00522         void _autoTrack(void);
    00523
    00524
    00534         virtual void setWindow (Real Left, Real Top, Real Right, Real Bottom);
    00536         virtual void resetWindow (void);
    00538         virtual bool isWindowSet(void) const { return mWindowSet; }
    00540         const vector<Plane>::type& getWindowPlanes(void) const;
    00541
    00543         Real getBoundingRadius(void) const;
    00545         SceneNode* getAutoTrackTarget(void) const { return mAutoTrackTarget; }
    00547         const Vector3& getAutoTrackOffset(void) const { return mAutoTrackOffset; }
    00548
    00554         Viewport* getViewport(void) const {return mLastViewport;}
    00556         void _notifyViewport(Viewport* viewport) {mLastViewport = viewport;}
    00557
    00565         void setAutoAspectRatio(bool autoratio);
    00566
    00569         bool getAutoAspectRatio(void) const;
    00570
    00582         void setCullingFrustum(Frustum* frustum) { mCullFrustum = frustum; }
    00584         Frustum* getCullingFrustum(void) const { return mCullFrustum; }
    00585
    00590         virtual void forwardIntersect(const Plane& worldPlane, vector<Vector4>::type* intersect3d) const;
    00591
    00593         bool isVisible(const AxisAlignedBox& bound, FrustumPlane* culledBy = 0) const;
    00595         bool isVisible(const Sphere& bound, FrustumPlane* culledBy = 0) const;
    00597         bool isVisible(const Vector3& vert, FrustumPlane* culledBy = 0) const;
    00599         const Vector3* getWorldSpaceCorners(void) const;
    00601         const Plane& getFrustumPlane( unsigned short plane ) const;
    00603         bool projectSphere(const Sphere& sphere,
    00604             Real* left, Real* top, Real* right, Real* bottom) const;
    00606         Real getNearClipDistance(void) const;
    00608         Real getFarClipDistance(void) const;
    00610         const Matrix4& getViewMatrix(void) const;
    00619         const Matrix4& getViewMatrix(bool ownFrustumOnly) const;
    00625         virtual void setUseRenderingDistance(bool use) { mUseRenderingDistance = use; }
    00629         virtual bool getUseRenderingDistance(void) const { return mUseRenderingDistance; }
    00630
    00637         virtual void synchroniseBaseSettingsWith(const Camera* cam);
    00638
    00640         const Vector3& getPositionForViewUpdate(void) const;
    00642         const Quaternion& getOrientationForViewUpdate(void) const;
    00643      };
    00647 } // namespace Ogre
    00648 #endif

Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Sun May 8 2011 20:28:08