17 #include "DynTerrain.h"
23 #define PI 3.1415926535897932385
30 #define ABS(x) (((x)<0)?(-(x)):(x))
34 #define ROUND(a) ((int)((a)+0.5))
41 typedef int Coord2d[2];
46 #define MAXERR USHRT_MAX
59 #define BORDER(t) (m_info[(t)->s] & PARTINROD)
60 #define INROD(t) (m_info[(t)->s] & ALLINROD)
61 #define PUTONSURFACE(t) \
62 m_info[(t)->s] = (m_info[(t)->s]&(ALLINROD|PARTINROD))|SURFACE
63 #define ONSURFACE(t) (m_info[(t)->s] & SURFACE)
64 #define INFOV(t) (m_info[(t)->s] & (ALLINFOV | PARTINFOV))
65 #define SMALLN1(t) (m_info[(t)->s] & SMALLER1)
66 #define SMALLN2(t) (m_info[(t)->s] & SMALLER2)
67 #define BIGN3(t) (m_info[(t)->s] & BIGGER3)
70 #define ISLEAF(t) ((t)->depth >= m_depth)
71 #define IAMLEFTCHILD(t) ((((t)->depth&1)&&(((t)->orient^(t)->x)&1)) || \
72 ((((t)->depth&1)==0)&&(((t)->orient^(t)->x^(t)->y)&1)))
73 #define TRIEQUATE(a,b) (a)->x=(b)->x; \
75 (a)->depth=(b)->depth; \
76 (a)->orient=(b)->orient; \
87 #define IERRTHRESH 0.001
88 #define IERRTHRESHINC 0.00005
89 #define IDISTTHRESH 700.0
90 #define IDISTTHRESHINC 50.0
92 #define IVEXAGGERINC 0.1
126 static int MemoryRequired(
int iDimension);
130 void DoCulling(
const vtCamera *pCam);
131 float GetElevation(
int iX,
int iZ,
bool bTrue =
false)
const;
132 void GetWorldLocation(
int iX,
int iZ,
FPoint3 &p,
bool bTrue =
false)
const;
133 virtual float GetVerticalExag()
const {
return m_fZScale; }
137 int calcErr(
const vtElevationGrid *pGrid, Coord2d p1, Coord2d p2, Coord2d p3);
138 int inFOV(Coord2d p1, Coord2d p2, Coord2d p3);
140 int inROD(Coord2d p1, Coord2d p2, Coord2d p3);
142 int init_ntriabove(
int depth);
143 void getVerts(
TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3);
155 void eyeSplit(
TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3);
158 int tooCoarse(
TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3);
159 void errSplit(
TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3);
161 void buildSurface(
FPoint3 &eyepos_ogl);
163 void emitDFS(
TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3);
164 void emitTri(
TriIndex *t, Coord2d p1, Coord2d p2, Coord2d p3);
165 void getNormal(
int,
int,
double,
int,
int,
double,
int,
int,
double,
double*,
double*,
double*);
172 float m_fXScale, m_fYScale, m_fZScale;
178 unsigned short *m_err;
182 double x_per_y, y_per_x, errPerEm;
187 double xmeters, ymeters;
188 double xscale, yscale;
191 Coord2d se, sw, ne, nw;
201 double etGrid, dtGrid;
204 double eyeEmx, eyeEmy, eyeEmz;