Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
QuadTree Class Reference

#include <quadtree.h>

Inheritance diagram for QuadTree:
Terrain

Public Member Functions

 QuadTree (const char *filename, const Vector &scales, const float Radius)
 
 ~QuadTree ()
 
void Render ()
 
void SetNeighbors (QuadTree *east, QuadTree *north, QuadTree *west, QuadTree *south)
 
void Update (unsigned short numstages, unsigned short whichstage, updateparity *updateorder=identityparity)
 
void SetTransformation (const Matrix &transformation)
 
float GetHeight (Vector Location, Vector &normal, const Matrix &transform, float TotalTerrainSizeX=0, float TotalTerrainSizeZ=0) const
 
void beginElement (const std::string &name, const XMLSupport::AttributeList &attributes)
 
void endElement (const std::string &name)
 
float getminX () const
 
float getminZ () const
 
float getmaxX () const
 
float getmaxZ () const
 
float getSizeX () const
 
float getSizeZ () const
 
void StaticCullData (const float detail)
 
bool GetGroundPos (QVector &Location, Vector &norm, float TTSX=0, float TTSZ=0) const
 
bool GetGroundPos (QVector &Location, Vector &norm, const Matrix &trans, float TotalTerrainSizeX=0, float TotalTerrainSizeZ=0) const
 
Vector GetNormal (const Vector &position, const Vector &requestednorm) const
 

Static Public Member Functions

static void beginElement (void *userData, const XML_Char *name, const XML_Char **atts)
 
static void endElement (void *userData, const XML_Char *name)
 

Protected Attributes

Matrix transformation
 

Detailed Description

This class is a wrapper class for quadsquare It takes care of activating textures, having possession of the vlist and having posession of the static vars that get set

Definition at line 15 of file quadtree.h.

Constructor & Destructor Documentation

QuadTree::QuadTree ( const char *  filename,
const Vector scales,
const float  Radius 
)

Definition at line 15 of file quadtree.cpp.

References quadcornerdata::ChildIndex, Identity(), quadcornerdata::Level, quadcornerdata::Parent, Matrix::r, quadsquare::SetCurrentTerrain(), VertInfo::SetTex(), quadcornerdata::Square, transformation, Vector, VertInfo::vertindex, quadcornerdata::Verts, quadcornerdata::xorg, VertInfo::Y, and quadcornerdata::zorg.

15  : minX( 0 )
16  , minZ( 0 )
17  , maxX( 0 )
18  , maxZ( 0 )
19  , Scales( Scales )
20  , vertices( GFXTRI, 4, InitialVertices, 4, true )
21 {
22  neighbors[0] = NULL;
23  neighbors[1] = NULL;
24  neighbors[2] = NULL;
25  neighbors[3] = NULL;
26  detail = 128;
28  transformation.r[0] = Scales.i;
29  transformation.r[4] = Scales.j;
30  transformation.r[8] = Scales.k;
31  //nonlinear_transform = new IdentityTransform;
32  RootCornerData.Parent = NULL;
33  RootCornerData.Square = NULL;
34  RootCornerData.ChildIndex = 0;
35  RootCornerData.Level = 15;
36  RootCornerData.xorg = 0;
37  RootCornerData.zorg = 0;
38  RootCornerData.Verts[0].Y = 0;
39  RootCornerData.Verts[0].vertindex = 0;
40  RootCornerData.Verts[1].Y = 0;
41  RootCornerData.Verts[1].vertindex = 1;
42  RootCornerData.Verts[2].Y = 0;
43  RootCornerData.Verts[2].vertindex = 2;
44  RootCornerData.Verts[3].Y = 0;
45  RootCornerData.Verts[3].vertindex = 3;
46  RootCornerData.Verts[0].SetTex( 0 );
47  RootCornerData.Verts[1].SetTex( 0 );
48  RootCornerData.Verts[2].SetTex( 0 );
49  RootCornerData.Verts[3].SetTex( 0 );
50  VertexAllocated = VertexCount = 4;
51  /*
52  * textures.push_back (TerrainTexture());
53  * for (int i=1;i<10;i++) {
54  * char name[]="terrainX.bmp";
55  * name[7] = '0'+i;
56  * TerrainTexture tmp;
57  * tmp.tex.t = new Texture (name);
58  * textures.push_back (tmp);
59  * }
60  */
61  if (filename) {
62  LoadXML( filename, Scales, radius );
63  //adData();
64  } else {
65  quadsquare::SetCurrentTerrain( &VertexAllocated,
66  &VertexCount,
67  &vertices,
68  &unusedvertices,
69  nonlinear_transform,
70  &textures,
71  Vector( 1.0F/Scales.i, 1.0F/Scales.j, 1.0F/Scales.k ),
72  neighbors );
73  root = new quadsquare( &RootCornerData );
74  }
75  //root->StaticCullData (RootCornerData,25);
76  /*
77  * for (i = 0; i < 10; i++) {
78  * root->Update(RootCornerData, (const float*) ViewerLoc, Detail);
79  * }
80  */
81 }
QuadTree::~QuadTree ( )

Definition at line 101 of file quadtree.cpp.

102 {
103  delete root;
104  delete nonlinear_transform;
105 }

Member Function Documentation

void QuadTree::beginElement ( void *  userData,
const XML_Char *  name,
const XML_Char **  atts 
)
static

Definition at line 37 of file quadtree_xml.cpp.

38 {
39  ( (QuadTree*) userData )->beginElement( name, XMLSupport::AttributeList( atts ) );
40 }
void QuadTree::beginElement ( const std::string &  name,
const XMLSupport::AttributeList attributes 
)
void QuadTree::endElement ( void *  userData,
const XML_Char *  name 
)
static

Definition at line 42 of file quadtree_xml.cpp.

43 {
44  ( (QuadTree*) userData )->endElement( name );
45 }
void QuadTree::endElement ( const std::string &  name)
bool QuadTree::GetGroundPos ( QVector Location,
Vector norm,
float  TTSX = 0,
float  TTSZ = 0 
) const
inline

Definition at line 80 of file quadtree.h.

References transformation.

Referenced by GameBuilding::UpdatePhysics2().

81  {
82  return GetGroundPos( Location, norm, transformation, TTSX, TTSZ );
83  }
bool QuadTree::GetGroundPos ( QVector Location,
Vector norm,
const Matrix trans,
float  TotalTerrainSizeX = 0,
float  TotalTerrainSizeZ = 0 
) const

Definition at line 107 of file quadtree.cpp.

References quadsquare::GetHeight(), InvScaleTransform(), IdentityTransform::InvTransform(), QVector, IdentityTransform::Transform(), Transform(), IdentityTransform::TransformNormal(), and TransformNormal().

112 {
113  QVector Loc = nonlinear_transform->InvTransform( InvScaleTransform( transf, Location ) );
114  if (TotalTerrainSizeX) {
115  float tmpx = Loc.i;
116  Loc.i = fmod( (double) Loc.i, (double) TotalTerrainSizeX );
117  if (Loc.i < 0)
118  Loc.i += TotalTerrainSizeX;
119  TotalTerrainSizeX = tmpx;
120  tmpx = Loc.k;
121  Loc.k = fmod( (double) Loc.k, (double) TotalTerrainSizeZ );
122  if (Loc.k < 0)
123  Loc.k += TotalTerrainSizeZ;
124  TotalTerrainSizeZ = tmpx;
125  } else {
126  TotalTerrainSizeX = Loc.i;
127  TotalTerrainSizeZ = Loc.k;
128  }
129  float tmp = root->GetHeight( RootCornerData, Loc.i, Loc.k, norm );
130  if (tmp > -FLT_MAX) {
131  //VSFileSystem::Fprintf (stderr,"Orig<%f,%f,%f> Now <%f,%f,%f>",Loc.i,Loc.j,Loc.k,Loc.i,tmp,Loc.k);
132  Location =
133  Transform( transf, nonlinear_transform->Transform( QVector( TotalTerrainSizeX, tmp, TotalTerrainSizeZ ) ) ).Cast();
134  norm = TransformNormal( transf, nonlinear_transform->TransformNormal( Location, norm ) );
135  norm.Normalize();
136 
137  return true;
138  }
139  return false;
140 }
float QuadTree::GetHeight ( Vector  Location,
Vector normal,
const Matrix transform,
float  TotalTerrainSizeX = 0,
float  TotalTerrainSizeZ = 0 
) const

}

Definition at line 142 of file quadtree.cpp.

References quadsquare::GetHeight(), InvScaleTransform(), IdentityTransform::InvTransform(), IdentityTransform::TransformNormal(), and TransformNormal().

Referenced by Terrain::Collide().

147 {
148  Location = nonlinear_transform->InvTransform( InvScaleTransform( transf, Location ) );
149  if (TotalTerrainSizeX) {
150  //float t1=Location.i;
151  //float t2=Location.k;
152  Location.i = fmod( Location.i, TotalTerrainSizeX );
153  Location.k = fmod( Location.k, TotalTerrainSizeZ );
154  //if (t1!=Location.i|| t2!=Location.k) {
155  //VSFileSystem::Fprintf (stderr,"wired");
157  if (Location.i < 0)
158  Location.i += TotalTerrainSizeX;
159  if (Location.k < 0)
160  Location.k += TotalTerrainSizeZ;
161  }
162  float tmp = Location.j-root->GetHeight( RootCornerData, Location.i, Location.k, normal );
163  normal = TransformNormal( transf, nonlinear_transform->TransformNormal( Location, normal ) );
164  normal.Normalize();
165  //VSFileSystem::Fprintf (stderr,"<%f>",tmp);
166  return tmp;
167 }
float QuadTree::getmaxX ( ) const
inline

Definition at line 63 of file quadtree.h.

References float.

64  {
65  return minX+(float) maxX;
66  }
float QuadTree::getmaxZ ( ) const
inline

Definition at line 67 of file quadtree.h.

References float.

68  {
69  return minZ+(float) maxZ;
70  }
float QuadTree::getminX ( ) const
inline

Definition at line 55 of file quadtree.h.

56  {
57  return 0;
58  }
float QuadTree::getminZ ( ) const
inline

Definition at line 59 of file quadtree.h.

60  {
61  return 0;
62  }
Vector QuadTree::GetNormal ( const Vector position,
const Vector requestednorm 
) const

Definition at line 264 of file quadtree.cpp.

References transformation, IdentityTransform::TransformNormal(), and TransformNormal().

Referenced by Terrain::GetUpVector().

265 {
266  return TransformNormal( transformation, nonlinear_transform->TransformNormal( position, norm ) );
267 }
float QuadTree::getSizeX ( ) const
inline

Definition at line 71 of file quadtree.h.

Referenced by ContinuousTerrain::AdjustTerrain(), ContinuousTerrain::Collide(), and ContinuousTerrain::ContinuousTerrain().

72  {
73  return maxX;
74  }
float QuadTree::getSizeZ ( ) const
inline

Definition at line 75 of file quadtree.h.

Referenced by ContinuousTerrain::ContinuousTerrain().

76  {
77  return maxZ;
78  }
void QuadTree::Render ( )

Definition at line 198 of file quadtree.cpp.

References _Universe, Universe::AccessCamera(), Camera::GetPosition(), GFXBlendMode(), GFXBoxInFrustumModel(), GFXDisable(), GFXEnable(), GFXLoadMatrixModel(), InvScaleTransform(), IdentityTransform::InvTransform(), LIGHTING, ONE, quadsquare::Render(), quadsquare::SetCurrentTerrain(), TEXTURE0, TEXTURE1, transformation, and ZERO.

Referenced by Terrain::Render().

199 {
202  GFXEnable( TEXTURE0 );
203  GFXDisable( TEXTURE1 );
204  GFXEnable( LIGHTING );
205  GFXBlendMode( ONE, ZERO );
206  quadsquare::SetCurrentTerrain( &VertexAllocated,
207  &VertexCount,
208  &vertices,
209  &unusedvertices,
210  nonlinear_transform,
211  &textures,
212  Scales,
213  neighbors );
214  root->Render( RootCornerData,
216 }
void QuadTree::SetNeighbors ( QuadTree east,
QuadTree north,
QuadTree west,
QuadTree south 
)

Definition at line 96 of file quadtree.cpp.

Referenced by ContinuousTerrain::ContinuousTerrain().

97 {
98  SetNeighbors( east->root, north->root, west->root, south->root );
99 }
void QuadTree::SetTransformation ( const Matrix transformation)

Definition at line 192 of file quadtree.cpp.

References calculatenormscale(), and transformation.

Referenced by Terrain::SetTransformation().

193 {
194  transformation = mat;
195  Scales = ( calculatenormscale( mat ) );
196 }
void QuadTree::StaticCullData ( const float  detail)

Definition at line 83 of file quadtree.cpp.

References quadsquare::StaticCullData().

Referenced by ContinuousTerrain::ContinuousTerrain().

84 {
85  root->StaticCullData( RootCornerData, detail );
86 }
void QuadTree::Update ( unsigned short  numstages,
unsigned short  whichstage,
updateparity updateorder = identityparity 
)

Definition at line 169 of file quadtree.cpp.

References _Universe, Universe::AccessCamera(), Camera::GetPosition(), InvScaleTransform(), IdentityTransform::InvTransform(), quadsquare::SetCurrentTerrain(), transformation, quadsquare::Update(), and Vector.

170 {
171  //GetViewerPosition
172  quadsquare::SetCurrentTerrain( &VertexAllocated,
173  &VertexCount,
174  &vertices,
175  &unusedvertices,
176  nonlinear_transform,
177  &textures,
178  Vector( 1.0F/Scales.i, 1.0F/Scales.j, 1.0F/Scales.k ),
179  neighbors );
180  root->Update( RootCornerData,
181  nonlinear_transform->InvTransform( InvScaleTransform( transformation,
182  _Universe->AccessCamera()->GetPosition() ) ), detail,
183  numstages, whichstage, uo );
184 }

Member Data Documentation

Matrix QuadTree::transformation
protected

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