/*] Copyright (c) 2009-2010, Charles McGarvey [************************** **] All rights reserved. * * vi:ts=4 sw=4 tw=75 * * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * **************************************************************************/ #ifndef _MOOF_CAMERA_HH_ #define _MOOF_CAMERA_HH_ #include #include #include #include namespace Mf { class Camera : public RigidBody3 { public: Camera() { mState.init(); mPrevState.init(); cml::quaternion_rotation_world_y(mState.orientation, SCALAR(0.0)); } void setPosition(const Vector3& position); void setRotation(const Quaternion& rotation); void lookAt(const Vector3& point); void setProjection(const Matrix4& projection); void setProjection(Scalar fovy, Scalar aspect, Scalar near, Scalar far); const Matrix4& getModelview() const { return mModelview; } const Matrix4& getProjection() const { return mProjection; } const Frustum& getFrustum() const { return mFrustum; } void uploadToGL(Scalar alpha = 0) const; void update(Scalar t, Scalar dt); void draw(Scalar alpha = 0) const; void handleEvent(const Event& event); private: void calculate(Scalar alpha) const; mutable Matrix4 mModelview; Matrix4 mProjection; mutable Frustum mFrustum; }; } // namespace Mf #endif // _MOOF_CAMERA_HH_