#include <GL/glut.h>
#include <XGL/xgl.h>
-#ifdef __sun__
+#if defined ( __sun__ )
extern "C" void *memmove(void *, const void *, size_t);
extern "C" void *memset(void *, int, size_t);
#endif
#include <list> // STL list
-#ifdef NEEDNAMESPACESTD
-using namespace std;
-#endif
#include <Bucket/bucketutils.h>
#include <Include/fg_types.h>
#include <Math/mat3.h>
+#ifdef NEEDNAMESPACESTD
+using namespace std;
+#endif
+
// Maximum nodes per tile
-#define MAX_NODES 1000
+#define MAX_NODES 2000
+
+// Forward declarations
+class fgTILE;
+class fgMATERIAL;
-typedef struct {
+
+class fgFACE {
+public:
int n1, n2, n3;
-} fgFACE;
+
+ fgFACE();
+ ~fgFACE();
+ fgFACE( const fgFACE & image );
+ bool operator < ( const fgFACE & rhs );
+ bool operator == ( const fgFACE & rhs );
+};
// Object fragment data class
// material property this fragment is assigned to.
// material property pointer
- void *material_ptr;
+ fgMATERIAL *material_ptr;
// tile pointer
- void *tile_ptr;
+ fgTILE *tile_ptr;
// OpenGL display list for fragment data
GLint display_list;
// face list (this indexes into the master tile vertex list)
list < fgFACE > faces;
- // Constructor
- fgFRAGMENT ( void );
+ // number of faces in this fragment
+ int num_faces;
// Add a face to the face list
void add_face(int n1, int n2, int n3);
// test if line intesects with this fragment. p0 and p1 are the
// two line end points of the line. If side_flag is true, check
// to see that end points are on opposite sides of face. Returns
- // 1 if it does, 0 otherwise. If it intesects, result is the
- // point of intersection
+ // 1 if it intersection found, 0 otherwise. If it intesects,
+ // result is the point of intersection
int intersect( fgPoint3d *end0, fgPoint3d *end1, int side_flag,
fgPoint3d *result);
+ // Constructors
+ fgFRAGMENT ();
+ fgFRAGMENT ( const fgFRAGMENT &image );
+
// Destructor
- ~fgFRAGMENT ( void );
+ ~fgFRAGMENT ( );
+
+ // operators
+ fgFRAGMENT & operator = ( const fgFRAGMENT & rhs );
+ bool operator == ( const fgFRAGMENT & rhs );
+ bool operator < ( const fgFRAGMENT & rhs );
};
// $Log$
+// Revision 1.17 1998/08/22 14:49:58 curt
+// Attempting to iron out seg faults and crashes.
+// Did some shuffling to fix a initialization order problem between view
+// position, scenery elevation.
+//
+// Revision 1.16 1998/08/22 02:01:34 curt
+// increased fragment list size.
+//
+// Revision 1.15 1998/08/20 15:12:06 curt
+// Used a forward declaration of classes fgTILE and fgMATERIAL to eliminate
+// the need for "void" pointers and casts.
+// Quick hack to count the number of scenery polygons that are being drawn.
+//
+// Revision 1.14 1998/08/12 21:13:06 curt
+// material.cxx: don't load textures if they are disabled
+// obj.cxx: optimizations from Norman Vine
+// tile.cxx: minor tweaks
+// tile.hxx: addition of num_faces
+// tilemgr.cxx: minor tweaks
+//
+// Revision 1.13 1998/07/24 21:42:08 curt
+// material.cxx: whups, double method declaration with no definition.
+// obj.cxx: tweaks to avoid errors in SGI's CC.
+// tile.cxx: optimizations by Norman Vine.
+// tilemgr.cxx: optimizations by Norman Vine.
+//
+// Revision 1.12 1998/07/22 21:41:42 curt
+// Add basic fgFACE methods contributed by Charlie Hotchkiss.
+// intersect optimization from Norman Vine.
+//
// Revision 1.11 1998/07/12 03:18:28 curt
// Added ground collision detection. This involved:
// - saving the entire vertex list for each tile with the tile records.