00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_MESHVP_WIND_TREE_H
00027 #define NL_MESHVP_WIND_TREE_H
00028
00029 #include "nel/misc/types_nl.h"
00030 #include "3d/mesh_vertex_program.h"
00031 #include "3d/vertex_program.h"
00032
00033
00034 namespace NL3D {
00035
00036
00037
00044 class CMeshVPWindTree : public IMeshVertexProgram
00045 {
00046 public:
00047
00048
00049 enum {HrcDepth= 3};
00050
00052
00053
00055 float Frequency[HrcDepth];
00057 float FrequencyWindFactor[HrcDepth];
00059 float PowerXY[HrcDepth];
00061 float PowerZ[HrcDepth];
00063 float Bias[HrcDepth];
00064
00066 bool SpecularLighting;
00067
00068
00069
00070 public:
00071
00073 CMeshVPWindTree();
00074 virtual ~CMeshVPWindTree();
00075
00076
00078
00079
00081 virtual void initInstance(CMeshBaseInstance *mbi);
00083 virtual bool begin(IDriver *drv,
00084 CScene *scene,
00085 CMeshBaseInstance *mbi,
00086 const NLMISC::CMatrix &invertedModelMat,
00087 const NLMISC::CVector & );
00089 virtual void end(IDriver *drv);
00090
00091
00092 virtual void setupForMaterial(const CMaterial &mat,
00093 IDriver *drv,
00094 CScene *scene,
00095 CVertexBuffer *vb);
00096
00097 virtual void setupForMaterial(const CMaterial &mat,
00098 IDriver *drv,
00099 CScene *scene,
00100 IVertexBufferHard *vb);
00101
00102
00103
00104
00105 virtual void serial(NLMISC::IStream &f) throw(NLMISC::EStream);
00106 NLMISC_DECLARE_CLASS(CMeshVPWindTree);
00107
00108
00109
00110 private:
00111 void setupLighting(CScene *scene, CMeshBaseInstance *mbi, const NLMISC::CMatrix &invertedModelMat);
00112 private:
00113
00114 enum { NumVp = 16};
00115
00119 static std::auto_ptr<CVertexProgram> _VertexProgram[NumVp];
00120
00121
00122 float _CurrentTime[HrcDepth];
00123 double _LastSceneTime;
00124
00125
00126 CVector _MaxDeltaPos[HrcDepth];
00127
00128
00129
00130 static float speedCos(float angle);
00131
00132
00133
00134
00135 };
00136
00137
00138 }
00139
00140
00141 #endif // NL_MESHVP_WIND_TREE_H
00142
00143