# Home    # nevrax.com   
Nevrax
Nevrax.org
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
Docs
 
Documentation  
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  

landscape_model.cpp

Go to the documentation of this file.
00001 
00007 /* Copyright, 2000 Nevrax Ltd.
00008  *
00009  * This file is part of NEVRAX NEL.
00010  * NEVRAX NEL is free software; you can redistribute it and/or modify
00011  * it under the terms of the GNU General Public License as published by
00012  * the Free Software Foundation; either version 2, or (at your option)
00013  * any later version.
00014 
00015  * NEVRAX NEL is distributed in the hope that it will be useful, but
00016  * WITHOUT ANY WARRANTY; without even the implied warranty of
00017  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00018  * General Public License for more details.
00019 
00020  * You should have received a copy of the GNU General Public License
00021  * along with NEVRAX NEL; see the file COPYING. If not, write to the
00022  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
00023  * MA 02111-1307, USA.
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         // We are sure that pyramid has normalized plane normals.
00054         landModel->Landscape.clip(trav->CamPos, pyramid);
00055 
00056         // Yes, this is ugly, but the clip pass is finished in render(), for clipping TessBlocks.
00057         // This saves an other Landscape patch traversal, so this is faster...
00058         landModel->CurrentPyramid= trav->WorldPyramid;
00059 
00060         // Well, always visible....
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         // First, refine.
00076         landModel->Landscape.refine(trav->CamPos);
00077         // then render.
00078         landModel->Landscape.render(trav->getDriver(), trav->CamPos, landModel->CurrentPyramid, landModel->isAdditive ());
00079 }
00080 
00081 
00082 
00083 } // NL3D