00001 /* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- 00002 00003 this file is part of rcssserver3D 00004 Fri May 9 2003 00005 Copyright (C) 2002,2003 Koblenz University 00006 Copyright (C) 2003 RoboCup Soccer Server 3D Maintenance Group 00007 $Id: camera.h,v 1.6 2004/02/12 14:07:23 fruit Exp $ 00008 00009 This program is free software; you can redistribute it and/or modify 00010 it under the terms of the GNU General Public License as published by 00011 the Free Software Foundation; version 2 of the License. 00012 00013 This program is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with this program; if not, write to the Free Software 00020 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00021 */ 00022 #ifndef KEROSIN_CAMERA_H 00023 #define KEROSIN_CAMERA_H 00024 00025 #include "basenode.h" 00026 #include <salt/frustum.h> 00027 00028 namespace oxygen 00029 { 00030 00035 class Camera : public BaseNode 00036 { 00037 // 00038 // Functions 00039 // 00040 public: 00041 Camera(); 00042 virtual ~Camera(); 00043 00044 // set properties 00045 00047 void SetViewport(int x, int y, int width, int height); 00048 int GetViewportX(); 00049 int GetViewportY(); 00050 int GetViewportWidth(); 00051 int GetViewportHeight(); 00052 00054 void SetFOV(const float fov); 00055 00057 void SetZNear(const float zNear); 00058 00060 void SetZFar(const float zFar); 00061 00063 void AdjustFOV(const float fov); 00064 00067 void AdjustZNear(const float zNear); 00068 00071 void AdjustZFar(const float zFar); 00072 00074 float GetFOV() const; 00075 00077 float GetZNear() const; 00078 00080 float GetZFar() const; 00081 00083 const salt::Matrix& GetViewTransform() const; 00084 00086 const salt::Matrix& GetProjectionTransform() const; 00087 00090 void DescribeFrustum(salt::Frustum& frustum) const; 00091 00095 void Bind(); 00096 00097 protected: 00099 virtual void OnLink(); 00100 00101 private: 00104 virtual void UpdateHierarchyInternal(); 00105 00106 // 00107 // Members 00108 // 00109 protected: 00111 float mFOV; 00112 00114 float mZNear; 00115 00117 float mZFar; 00118 00120 int mX; 00121 00123 int mY; 00124 00126 int mWidth; 00127 00129 int mHeight; 00130 float mHalfWorldWidth; 00131 float mHalfWorldHeight; 00132 00134 salt::Matrix mViewTransform; 00135 00137 salt::Matrix mProjectionTransform; 00138 }; 00139 00140 DECLARE_CLASS(Camera); 00141 00142 } //namespace kerosin 00143 00144 #endif //KEROSIN_CAMERA_H