Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
TVTerrain Class Reference

#include <TVTerrain.h>

Inheritance diagram for TVTerrain:
vtDynTerrainGeom vtDynGeom vtHeightFieldGrid3d vtGeode vtHeightField3d NodeExtension vtHeightField

Public Member Functions

DTErr Init (const vtElevationGrid *pGrid, float fZScale)
 initialization
 
void DoRender ()
 
void DoCulling (const vtCamera *pCam)
 
float GetElevation (int iX, int iZ, bool bTrue=false) const
 
void GetWorldLocation (int iX, int iZ, FPoint3 &p, bool bTrue=false) const
 
virtual float GetVerticalExag () const
 
- Public Member Functions inherited from vtDynTerrainGeom
virtual void Init2 ()
 
DTErr BasicInit (const vtElevationGrid *pGrid)
 
virtual void SetVerticalExag (float fExag)
 
virtual void SetPolygonTarget (int iPolygonCount)
 
int GetPolygonTarget ()
 
int GetNumDrawnTriangles ()
 
void SetDetailMaterial (vtMaterial *pApp, float fTiling, float fDistance)
 
void EnableDetail (bool bOn)
 
bool GetDetail ()
 
void SetupTexGen (float fTiling)
 
void DisableTexGen ()
 
void DoCalcBoundBox (FBox3 &box)
 
void DoCull (const vtCamera *pCam)
 
bool FindAltitudeOnEarth (const DPoint2 &p, float &fAltitude, bool bTrue=false) const
 
bool FindAltitudeAtPoint (const FPoint3 &p3, float &fAltitude, bool bTrue=false, int iCultureFlags=0, FPoint3 *vNormal=NULL) const
 
virtual void SetElevation (int i, int j, float fValue, bool bTrue=false)
 
void SetCull (bool bOnOff)
 
void CullOnce ()
 
void PreRender () const
 
void PostRender () const
 
- Public Member Functions inherited from vtDynGeom
int IsVisible (const FSphere &sphere) const
 
int IsVisible (const FPoint3 &point0, const FPoint3 &point1, const FPoint3 &point2, const float fTolerance=0.0f) const
 
int IsVisible (const FPoint3 &point, float radius)
 
bool IsVisible (const FPoint3 &point) const
 
void ApplyMaterial (vtMaterial *mat)
 
- Public Member Functions inherited from vtGeode
vtGeodeCloneGeode ()
 
void CloneFromGeode (const vtGeode *rhs)
 
void AddMesh (vtMesh *pMesh, int iMatIdx)
 
void RemoveMesh (vtMesh *pMesh)
 
void AddTextMesh (vtTextMesh *pMesh, int iMatIdx)
 
uint GetNumMeshes () const
 
vtMeshGetMesh (int i) const
 
vtTextMeshGetTextMesh (int i) const
 
virtual void SetMaterials (const class vtMaterialArray *mats)
 
const vtMaterialArrayGetMaterials () const
 
vtMaterialGetMaterial (int idx)
 
void SetMeshMatIndex (vtMesh *pMesh, int iMatIdx)
 
- Public Member Functions inherited from NodeExtension
void SetEnabled (bool bOn)
 
bool GetEnabled () const
 
void SetCastShadow (bool b)
 Set this node to cast a shadow, if it is under a vtShadow node. Default is false.
 
bool GetCastShadow ()
 Get whether this node casts a shadow.
 
void GetBoundSphere (FSphere &sphere, bool bGlobal=false)
 Get the Bounding Sphere of the node.
 
void SetOsgNode (osg::Node *n)
 
- Public Member Functions inherited from vtHeightFieldGrid3d
void Initialize (const LinearUnits units, const DRECT &earthextents, float fMinHeight, float fMaxHeight, int cols, int rows)
 
virtual void SetEarthExtents (const DRECT &ext)
 
bool CastRayToSurface (const FPoint3 &point, const FPoint3 &dir, FPoint3 &result) const
 
bool LineOfSight (const FPoint3 &point1, const FPoint3 &point2) const
 
DPoint2 GetSpacing () const
 
FPoint2 GetWorldSpacing () const
 
void GetDimensions (int &nColumns, int &nRows) const
 
int NumColumns ()
 
int NumRows ()
 
void EarthToGrid (const DPoint2 &epos, IPoint2 &ipos)
 
void WorldToGrid (const FPoint3 &pos, IPoint2 &ipos)
 
float GetInterpolatedElevation (double findex_x, double findex_y) const
 
int FindNumUnknown ()
 
bool ColorDibFromElevation (vtBitmapBase *pBM, const ColorMap *cmap, int iGranularity, const RGBAi &nodata, bool progress_callback(int)=NULL)
 
bool ColorDibFromTable (vtBitmapBase *pBM, std::vector< RGBi > &table, float fMin, float fMax, const RGBAi &nodata, bool progress_callback(int)=NULL)
 
void ShadeDibFromElevation (vtBitmapBase *pBM, const FPoint3 &light_dir, float fLightFactor, float fAmbient=0.1f, float fGamma=1.0f, bool bTrue=false, bool progress_callback(int)=NULL)
 
void ShadeQuick (vtBitmapBase *pBM, float light_factor, bool bTrue=false, bool progress_callback(int)=NULL)
 
void ShadowCastDib (vtBitmapBase *pBM, const FPoint3 &ight_dir, float fLightFactor, float fAmbient, bool progress_callback(int)=NULL)
 
- Public Member Functions inherited from vtHeightField3d
void Initialize (const LinearUnits units, const DRECT &earthextents, float fMinHeight, float fMaxHeight)
 
int PointIsAboveTerrain (const FPoint3 &p) const
 
bool ConvertEarthToSurfacePoint (const DPoint2 &epos, FPoint3 &p3, int iCultureFlags=0, bool bTrue=false)
 
bool ContainsWorldPoint (float x, float z)
 
void GetCenter (FPoint3 &center)
 
void SetCulture (CultureExtension *ext)
 
- Public Member Functions inherited from vtHeightField
void Initialize (const DRECT &extents, float fMinHeight, float fMaxHeight)
 
bool ContainsEarthPoint (const DPoint2 &p, bool bInclusive=false) const
 
DRECTGetEarthExtents ()
 
const DRECTGetEarthExtents () const
 
void GetHeightExtents (float &fMinHeight, float &fMaxHeight) const
 

Static Public Member Functions

static int MemoryRequired (int iDimension)
 

Protected Member Functions

void mkscale (const vtElevationGrid *pGrid)
 
int calcErr (const vtElevationGrid *pGrid, Coord2d p1, Coord2d p2, Coord2d p3)
 
int inFOV (Coord2d p1, Coord2d p2, Coord2d p3)
 
int triInFOV (TriIndex *t)
 
int inROD (Coord2d p1, Coord2d p2, Coord2d p3)
 
void makeDFS (const vtElevationGrid *pGrid, TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3)
 
int init_ntriabove (int depth)
 
void getVerts (TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3)
 
void parent (TriIndex *t, TriIndex *p)
 
void bro1 (TriIndex *t, TriIndex *b1)
 
void bro2 (TriIndex *t, TriIndex *b2)
 
void bro3 (TriIndex *t, TriIndex *b3)
 
void nbr1 (TriIndex *t, TriIndex *n1)
 
void nbr2 (TriIndex *t, TriIndex *n2)
 
void nbr3 (TriIndex *t, TriIndex *n3)
 
void kidsOnSurf (TriIndex *t)
 
void split (TriIndex *t)
 
void rodSplit (TriIndex *t)
 
void eyeSplit (TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3)
 
void baseSurface ()
 
int tooCoarse (TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3)
 
void errSplit (TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3)
 
void errSurface ()
 
void buildSurface (FPoint3 &eyepos_ogl)
 
void emitSurface ()
 
void emitDFS (TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3)
 
void emitTri (TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3)
 
void getNormal (int, int, double, int, int, double, int, int, double, double *, double *, double *)
 

Additional Inherited Members

- Public Attributes inherited from vtDynTerrainGeom
int m_iTotalTriangles
 
int m_iDrawnTriangles
 
- Protected Attributes inherited from vtDynTerrainGeom
float * m_fXLookup
 
float * m_fZLookup
 
int m_iPolygonTarget
 
bool m_bCulleveryframe
 
bool m_bCullonce
 
float m_fDetailTiling
 
float m_fDetailDistance
 
bool m_bDetailTexture
 
vtMaterialm_pDetailMat
 

Detailed Description

The TVTerrain class implements the TopoVista algorithm for regular-grid terrain LOD.
This algorithm requires that the input heightfield is a square regular grid, of any size. Storage requirements are around 14 bytes/vertex. The data is represented in memory by a binary tree of faces.
The VTP implementation consists of an adaptation of the author's own source code, made to work in the vtDynTerrainGeom framework.
The algorithm is promising, but needs a lot of work:
  • Doesn't currently address lighting or texturing
  • Doesn't utilize triangle strips
  • Uses a very simple error metric based only on ground (2D) distance
So far i have extended the algorithm in the following ways:
  • Added full 6-plane view-volume culling (instead of the previously simple 2D culling). This required implementing some 3d triangle culling which was mysteriously absent from the computer graphics literature.

The documentation for this class was generated from the following files: