Sirikata
libogre/include/sirikata/ogre/Camera.hpp
Go to the documentation of this file.
00001 /*  Sirikata
00002  *  Camera.hpp
00003  *
00004  *  Copyright (c) 2009, Patrick Reiter Horn
00005  *  All rights reserved.
00006  *
00007  *  Redistribution and use in source and binary forms, with or without
00008  *  modification, are permitted provided that the following conditions are
00009  *  met:
00010  *  * Redistributions of source code must retain the above copyright
00011  *    notice, this list of conditions and the following disclaimer.
00012  *  * Redistributions in binary form must reproduce the above copyright
00013  *    notice, this list of conditions and the following disclaimer in
00014  *    the documentation and/or other materials provided with the
00015  *    distribution.
00016  *  * Neither the name of Sirikata nor the names of its contributors may
00017  *    be used to endorse or promote products derived from this software
00018  *    without specific prior written permission.
00019  *
00020  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00021  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00022  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00023  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00024  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00025  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00026  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00027  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00028  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00029  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00030  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00031  */
00032 
00033 #ifndef SIRIKATA_OGRE_CAMERA_HPP__
00034 #define SIRIKATA_OGRE_CAMERA_HPP__
00035 
00036 #include <sirikata/ogre/Platform.hpp>
00037 #include <sirikata/ogre/OgreHeaders.hpp>
00038 #include <OgreMovableObject.h>
00039 #include <OgreRenderable.h>
00040 #include <OgreRenderTarget.h>
00041 
00042 
00043 namespace Sirikata {
00044 namespace Graphics {
00045 
00046 class OgreRenderer;
00047 
00048 class SIRIKATA_OGRE_EXPORT Camera {
00049 protected:
00050     OgreRenderer *const mScene;
00051     Ogre::SceneManager* mOgreSceneManager;
00052     Ogre::Camera* mOgreCamera;
00053     Ogre::SceneNode *mSceneNode;
00054 
00055     Ogre::RenderTarget *mRenderTarget;
00056     Ogre::Viewport *mViewport;
00057 
00058     float32 mViewportLeft, mViewportTop, mViewportRight, mViewportBottom;
00059 public:
00060     Camera(OgreRenderer *scene, Ogre::SceneManager* scenemgr, const String& name);
00061     virtual ~Camera();
00062 
00063     void attach (const String&renderTargetName,
00064         uint32 width,
00065         uint32 height,
00066         Vector4f back_color,
00067         int zorder);
00068 
00069     void detach();
00070 
00071     void windowResized();
00072 
00073     OgreRenderer* getScene() { return mScene; }
00074 
00075     Ogre::Viewport* getViewport() {
00076         return mViewport;
00077     }
00078     Ogre::Camera* getOgreCamera() {
00079         return mOgreCamera;
00080     }
00081 
00082     void setViewportDimensions(int32 left, int32 top, int32 right, int32 bottom);
00083     void setViewportDimensions(float32 left, float32 top, float32 right, float32 bottom);
00084 
00085     Vector3d getPosition() const;
00086     void setPosition(const Vector3d& pos);
00087     Quaternion getOrientation() const;
00088     void setOrientation(const Quaternion& orient);
00089 
00090     float64 getNearClip() const;
00091     void setNearClip(float64 d);
00092     float64 getFarClip() const;
00093     void setFarClip(float64 d);
00094 
00095     float32 getFOVY() const;
00096     void setFOVY(float32 v);
00097 };
00098 
00099 }
00100 }
00101 
00102 #endif // SIRIKATA_OGRE_CAMERA_HPP_