00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_CAMERA_H
00027 #define NL_CAMERA_H
00028
00029 #include "nel/3d/frustum.h"
00030 #include "3d/transform.h"
00031
00032
00033 namespace NL3D
00034 {
00035
00036
00037
00038
00039 const NLMISC::CClassId CameraId=NLMISC::CClassId(0x5752634c, 0x6abe76f5);
00040
00041
00042
00056 class CCamera : public CTransform
00057 {
00058 public:
00060 static void registerBasic();
00061
00062
00063 public:
00064
00066 void setFrustum(const CFrustum &f) {_Frustum= f;}
00068 const CFrustum& getFrustum() const {return _Frustum;}
00070 void setFrustum(float left, float right, float bottom, float top, float znear, float zfar, bool perspective= true);
00072 void setFrustum(float width, float height, float znear, float zfar, bool perspective= true);
00074 void getFrustum(float &left, float &right, float &bottom, float &top, float &znear, float &zfar) const;
00076 bool isOrtho() const;
00078 bool isPerspective() const;
00085 void setPerspective(float fov, float aspectRatio, float znear, float zfar);
00086
00087
00091 bool enableFovAnimation(bool en, float aspectRatio= 4.0f / 3.0f)
00092 {
00093 _FovAnimationEnabled= en;
00094 if(en)
00095 _FovAnimationAspectRatio= aspectRatio;
00096 return true;
00097 }
00101 bool enableTargetAnimation(bool en)
00102 {
00103 setTransformMode(ITransformable::RotQuat);
00104 _TargetAnimationEnabled= en;
00105 _Roll.Value= 0;
00106 return true;
00107 }
00108
00109
00111
00115 static const char *getFovValueName() {return "fov";}
00117 static const char *getTargetValueName() {return "target";}
00119 static const char *getRollValueName() {return "roll";}
00120
00121
00122
00124
00125 enum TAnimValues
00126 {
00127 OwnerBit= CTransform::AnimValueLast,
00128 FovValue ,
00129 TargetValue,
00130 RollValue,
00131
00132 AnimValueLast,
00133 };
00134
00136 virtual IAnimatedValue* getValue (uint valueId);
00138 virtual const char *getValueName (uint valueId) const;
00140 virtual ITrack* getDefaultTrack (uint valueId);
00142 virtual void registerToChannelMixer(CChannelMixer *chanMixer, const std::string &prefix);
00143
00144
00145
00146
00147 protected:
00149 CCamera();
00151 virtual ~CCamera() {}
00152
00153
00154 CFrustum _Frustum;
00155
00156
00158 virtual void update();
00159
00160
00161 private:
00162 static IModel *creator() {return new CCamera;}
00163
00164
00165 private:
00166 bool _FovAnimationEnabled;
00167 bool _TargetAnimationEnabled;
00168 float _FovAnimationAspectRatio;
00169
00170
00171 CAnimatedValueFloat _Fov;
00172 CAnimatedValueVector _Target;
00173 CAnimatedValueFloat _Roll;
00174
00175
00176
00177 static CTrackDefaultFloat DefaultFov;
00178 static CTrackDefaultVector DefaultTarget;
00179 static CTrackDefaultFloat DefaultRoll;
00180
00181
00182 };
00183
00184
00185
00186 }
00187
00188
00189 #endif // NL_CAMERA_H
00190
00191