00001
00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024
00025
00026 #include "nel/3d/landscape_model.h"
00027 #include "nel/3d/landscape.h"
00028 #include <vector>
00029 using namespace std;
00030 using namespace NLMISC;
00031
00032
00033 namespace NL3D
00034 {
00035
00036
00037
00038
00039 void CLandscapeModel::registerBasic()
00040 {
00041 CMOT::registerModel(LandscapeModelId, TransformId, CLandscapeModel::creator);
00042 CMOT::registerObs(ClipTravId, LandscapeModelId, CLandscapeClipObs::creator);
00043 CMOT::registerObs(RenderTravId, LandscapeModelId, CLandscapeRenderObs::creator);
00044 }
00045
00046
00047 bool CLandscapeClipObs::clip(IBaseClipObs *caller)
00048 {
00049
00050 CLandscapeModel *landModel= (CLandscapeModel*)Model;
00051 CClipTrav *trav= (CClipTrav*)Trav;
00052 vector<CPlane> &pyramid= trav->WorldPyramid;
00053
00054 landModel->Landscape.clip(trav->CamPos, pyramid);
00055
00056
00057
00058 landModel->CurrentPyramid= trav->WorldPyramid;
00059
00060
00061 return true;
00062 }
00063
00064
00065 void CLandscapeRenderObs::traverse(IObs *caller)
00066 {
00067 CLandscapeModel *landModel= (CLandscapeModel*)Model;
00068
00069 CRenderTrav *trav= (CRenderTrav*)Trav;
00070
00071 CMatrix m;
00072 m.identity();
00073 trav->getDriver()->setupModelMatrix(m);
00074
00075
00076 landModel->Landscape.refine(trav->CamPos);
00077
00078 landModel->Landscape.render(trav->getDriver(), trav->CamPos, landModel->CurrentPyramid, landModel->isAdditive ());
00079 }
00080
00081
00082
00083 }