00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #ifndef _GRVTXTABLE_H_
00046 #define _GRVTXTABLE_H_
00047 #include "grmultitexstate.h"
00048
00049 #define LEVELC -1
00050
00051 #define LEVELC2 -2
00052
00053 #define LEVELC3 -3
00054
00055 #define LEVEL0 1
00056 #define LEVEL1 2
00057 #define LEVEL2 4
00058 #define LEVEL3 8
00059
00060
00061
00062 class grVtxTable : public ssgVtxTable
00063 {
00064 grMultiTexState *state ;
00065 grMultiTexState *state1 ;
00066 grMultiTexState *state2 ;
00067 grMultiTexState *state3 ;
00068
00069 #define ARRAY 1
00070 #define TABLE 2
00071 int internalType;
00072
00073 protected:
00074 virtual void copy_from ( grVtxTable *src, int clone_flags ) ;
00075 ssgIndexArray *indices;
00076 ssgIndexArray *stripes;
00077 int numStripes;
00078
00079
00080
00081
00082 _SSG_PUBLIC:
00083 ssgTexCoordArray *texcoords1 ;
00084 ssgTexCoordArray *texcoords2 ;
00085 ssgTexCoordArray *texcoords3 ;
00086
00087 public:
00088 int numMapLevel;
00089 int mapLevelBitmap;
00090 int indexCar;
00091 virtual ssgBase *clone ( int clone_flags = 0 ) ;
00092
00093 grVtxTable (int _numMapLevel,int _mapLevel) ;
00094 grVtxTable ( GLenum ty, ssgVertexArray *vl,
00095 ssgNormalArray *nl,
00096 ssgTexCoordArray *tl,
00097 ssgTexCoordArray *tl1,
00098 ssgTexCoordArray *tl2,
00099 ssgTexCoordArray *tl3,
00100 int _numMapLevel,
00101 int _mapLevel,
00102 ssgColourArray *cl,
00103 int _indexCar ) ;
00104 grVtxTable ( GLenum ty, ssgVertexArray *vl,
00105 ssgIndexArray * stripeIndex,
00106 int _numstripes,
00107 ssgIndexArray *il,
00108 ssgNormalArray *nl,
00109 ssgTexCoordArray *tl,
00110 ssgTexCoordArray *tl1,
00111 ssgTexCoordArray *tl2,
00112 ssgTexCoordArray *tl3,
00113 int _numMapLevel,
00114 int _mapLevel,
00115 ssgColourArray *cl,
00116 int _indexCar ) ;
00117 grVtxTable (ssgVertexArray *shd_vtx , float initsize, int type);
00118
00119 float *getTexCoord1(int i){ if(i>=getNumTexCoords())i=getNumTexCoords()-1;
00120 return (getNumTexCoords()<=0) ?
00121 _ssgTexCoord00 : texcoords1->get(i);}
00122 float *getTexCoord2(int i){ if(i>=getNumTexCoords())i=getNumTexCoords()-1;
00123 return (getNumTexCoords()<=0) ?
00124 _ssgTexCoord00 : texcoords2->get(i);}
00125 float *getTexCoord3(int i){ if(i>=getNumTexCoords())i=getNumTexCoords()-1;
00126 return (getNumTexCoords()<=0) ?
00127 _ssgTexCoord00 : texcoords3->get(i);}
00128
00129 ssgState *getState1 () { return state1 ; }
00130 void setState1 ( ssgState *st );
00131 ssgState *getState2 () { return state2 ; }
00132 void setState2 ( ssgState *st );
00133 ssgState *getState3 () { return state3 ; }
00134 void setState3 ( ssgState *st );
00135
00136 virtual void draw () ;
00137
00138 void draw_geometry_array();
00139 void draw_geometry_multi();
00140 void draw_geometry_for_a_car () ;
00141 void draw_geometry_multi_array();
00142 void draw_geometry_for_a_car_array () ;
00143 virtual void drawHighlight ( sgVec4 colour ){ssgVtxTable::drawHighlight(colour);}
00144 virtual void drawHighlight ( sgVec4 colour, int i ){ssgVtxTable::drawHighlight(colour,i);}
00145
00146 virtual void pick ( int baseName ) { ssgVtxTable::pick(baseName);}
00147 virtual void transform ( const sgMat4 m ) { ssgVtxTable::transform(m);}
00148
00149
00150 int getNumVertices () { return vertices -> getNum () ; }
00151 int getNumNormals () { return normals -> getNum () ; }
00152 int getNumColours () { return colours -> getNum () ; }
00153 int getNumTexCoords () { return texcoords -> getNum () ; }
00154
00155
00156 int getNumTriangles () { return ssgVtxTable::getNumTriangles();}
00157 void getTriangle ( int n, short *v1, short *v2, short *v3 ) { ssgVtxTable::getTriangle(n,v1,v2,v3);}
00158 int getNumLines () {return ssgVtxTable::getNumLines();}
00159 void getLine ( int n, short *v1, short *v2 ) { ssgVtxTable::getLine(n,v1,v2);}
00160
00161
00162 virtual ~grVtxTable (void);
00163
00164 virtual const char *getTypeName(void) { return ssgVtxTable::getTypeName();}
00165
00166 virtual void setVertices ( ssgVertexArray *vl ) { ssgVtxTable::setVertices(vl);}
00167 virtual void setNormals ( ssgNormalArray *nl ) { ssgVtxTable::setNormals(nl);}
00168 virtual void setTexCoords ( ssgTexCoordArray *tl ) { ssgVtxTable::setTexCoords(tl);}
00169 virtual void setColours ( ssgColourArray *cl ) { ssgVtxTable::setColours(cl);}
00170
00171
00172 virtual void print ( FILE *fd = stderr, char *indent = "", int how_much = 2) { ssgVtxTable::print(fd,indent,how_much);}
00173 virtual int load ( FILE *fd ) {return ssgVtxTable::load(fd);}
00174 virtual int save ( FILE *fd ) {return ssgVtxTable::save(fd);}
00175 };
00176
00177
00178 #endif