00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_TRAV_SCENE_H
00027 #define NL_TRAV_SCENE_H
00028
00029
00030 #include "nel/misc/matrix.h"
00031 #include "nel/misc/smart_ptr.h"
00032
00033
00034
00035 namespace NL3D
00036 {
00037
00038 class CScene;
00039
00040 using NLMISC::CVector;
00041 using NLMISC::CPlane;
00042 using NLMISC::CMatrix;
00043
00044
00045
00061 class ITravScene : public ITrav
00062 {
00063 public:
00064 CScene *Scene;
00065 public:
00067 ITravScene() : Scene(NULL) {}
00076 virtual sint getRenderOrder() const =0;
00077
00081 virtual void traverse() =0;
00082
00083 protected:
00086 virtual void addedToMOT(CMOT *mot);
00087 };
00088
00089
00090
00095 class ITravCameraScene : public ITravScene
00096 {
00097 public:
00102
00103 float Left, Right, Bottom, Top, Near, Far;
00104 bool Perspective;
00105 NLMISC::CMatrix CamMatrix;
00106 NLMISC::CMatrix ViewMatrix;
00107 NLMISC::CVector CamPos;
00108 NLMISC::CVector CamLook;
00110
00111
00112 public:
00114 void setFrustum(float left, float right, float bottom, float top, float znear, float zfar, bool perspective= true)
00115 {
00116 Left= left;
00117 Right= right;
00118 Bottom= bottom;
00119 Top= top;
00120 Near= znear;
00121 Far= zfar;
00122 Perspective= perspective;
00123 }
00125 void setFrustum(float width, float height, float znear, float zfar, bool perspective= true)
00126 {
00127 setFrustum(-width/2, width/2, -height/2, height/2, znear, zfar, perspective);
00128 }
00130 void setCamMatrix(const NLMISC::CMatrix &camMatrix)
00131 {
00132 CamMatrix= camMatrix;
00133 }
00134
00135
00137 ITravCameraScene()
00138 {
00139 setFrustum(1.0f, 1.0f, 0.01f, 1.0f);
00140 CamMatrix.identity();
00141 ViewMatrix.identity();
00142 CamPos= NLMISC::CVector::Null;
00143 CamLook= NLMISC::CVector::Null;
00144 }
00145
00146
00147 protected:
00148
00150 void update()
00151 {
00152 ViewMatrix= CamMatrix.inverted();
00153 CamPos= CamMatrix.getPos();
00154 CamLook= CamMatrix.mulVector(NLMISC::CVector::J);
00155 }
00156
00157
00158 };
00159
00160
00161 }
00162
00163
00164 #endif // NL_TRAV_SCENE_H
00165
00166