Gizmo3D

gzGeometry.h

Go to the documentation of this file.
00001 //*****************************************************************************
00002 // File         : gzGeometry.h
00003 // Module       : 
00004 // Description  : Class definition of the gzGeometry class
00005 // Author       : Anders Modén      
00006 // Product      : Gizmo3D 2.1.1
00007 //      
00008 // Copyright © 2003- Saab Training Systems AB, Sweden
00009 //          
00010 // NOTE:    Gizmo3D is a high performance 3D Scene Graph and effect visualisation 
00011 //          C++ toolkit for Linux, Mac OS X, Windows (Win32) and IRIX® for  
00012 //          usage in Game or VisSim development.
00013 //
00014 //
00015 // Revision History...                          
00016 //                                  
00017 // Who  Date    Description                     
00018 //                                  
00019 // AMO  981122  Created file    
00020 //
00021 //******************************************************************************
00022 #ifndef __GZ_GEOMETRY_H__
00023 #define __GZ_GEOMETRY_H__
00024 
00031 #include "gzNode.h"
00032 #include "gzState.h"
00033 #include "gzMatrix.h"
00034 #include "gzDisplayList.h"
00035 #include "gzVertexAttributes.h"
00036 
00037 
00038 enum gzGeoPrimType
00039 {   GZ_PRIM_NOPRIM , 
00040     GZ_PRIM_POINTS ,                
00041     GZ_PRIM_LINES ,                 
00042     GZ_PRIM_LINESTRIPS ,            
00043     GZ_PRIM_FLAT_LINESTRIPS ,       
00044     GZ_PRIM_LINELOOPS ,             
00045     GZ_PRIM_TRIS ,                  
00046     GZ_PRIM_QUADS ,                 
00047     GZ_PRIM_TRISTRIPS ,             
00048     GZ_PRIM_FLAT_TRISTRIPS ,        
00049     GZ_PRIM_TRIFANS ,               
00050     GZ_PRIM_FLAT_TRIFANS ,          
00051     GZ_PRIM_POLYS ,                 
00052     GZ_PRIM_QUADSTRIPS,             
00053     GZ_PRIM_HIDDEN_POLYS            
00054 };
00055     
00056 
00057 // Optimizer levels
00058 
00059 enum gzGeoOptimizeLevel
00060 {   GZ_GEO_OPTIMIZE_NO_OPTS             =   (1<<0),     
00061     GZ_GEO_OPTIMIZE_LEAVE_LINES         =   (1<<2),     
00062     GZ_GEO_OPTIMIZE_FAN_TO_TRISTRIP     =   (1<<3),     
00063     GZ_GEO_OPTIMIZE_GENERATE_NORMALS    =   (1<<4),     
00064     GZ_GEO_OPTIMIZE_INDEXED             =   (1<<5),     
00065     GZ_GEO_OPTIMIZE_TO_TRIANGLES        =   (1<<6),     
00066     GZ_GEO_OPTIMIZE_DONT_USE_PER_PRIM   =   (1<<7),     
00067 };
00068 
00069 enum gzPolygonWinding
00070 {
00071     GZ_POLYGON_WINDING_UNDEFINED            =   0,
00072     GZ_POLYGON_WINDING_CLOCKWISE            =   1,
00073     GZ_POLYGON_WINDING_COUNTER_CLOCKWISE    =   2,
00074     GZ_POLYGON_WINDING_MIXED                =   3,
00075 };
00076 
00077 GZ_USE_BIT_LOGIC(gzGeoOptimizeLevel);
00078 GZ_USE_BIT_LOGIC(gzPolygonWinding);
00079 
00080 
00081 enum gzStitchSettings
00082 {
00083     GZ_STITCH_SETTING_OFF                   =   0,
00084     GZ_STITCH_SETTING_EVEN_ODD              =   1,
00085     GZ_STITCH_SETTING_NON_ZERO              =   2,
00086     GZ_STITCH_SETTING_OR                    =   2,
00087     GZ_STITCH_SETTING_POSITIVE              =   3,
00088     GZ_STITCH_SETTING_NEGATIVE              =   4,
00089     GZ_STITCH_SETTING_AND                   =   5,
00090     GZ_STITCH_SETTING_DEFAULT               =   GZ_STITCH_SETTING_EVEN_ODD,
00091 };
00092 
00093 GZ_USE_BIT_LOGIC(gzStitchSettings);
00094 
00095 //******************************************************************************
00096 // Class    : gzVertexGroupInfo
00097 //                                  
00098 // Purpose  : -
00099 //                                  
00100 // Notes    : - 
00101 //                                  
00102 // Revision History...                          
00103 //                                  
00104 // Who  Date    Description                     
00105 //                                  
00106 // AMO  000202  Created 
00107 //                                  
00108 //******************************************************************************
00109 class gzVertexGroupInfo
00110 {
00111 public:
00112     gzArray<gzULong>    groupID;
00113     gzArray<gzULong>    connections;
00114 };
00115 
00116 //******************************************************************************
00117 // Class    : gzBaseGeometry
00118 //                                  
00119 // Purpose  : 
00120 //                                  
00121 // Notes    : - 
00122 //                                  
00123 // Revision History...                          
00124 //                                  
00125 // Who  Date    Description                     
00126 //                                  
00127 // AMO  020202  Created 
00128 //                                  
00129 //******************************************************************************
00130 class gzBaseGeometry : public gzNode // Default base Interface for all geometry
00131 {
00132 public:
00134 
00137     GZ_GRAPH_EXPORT gzBaseGeometry(const gzString & name=GZ_EMPTY_STRING);
00138 
00139     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);  // typed interface
00140 
00141     // ---------- Action Interface --------------------------------------
00142 
00143     GZ_GRAPH_EXPORT virtual gzActionStage useActionStage( gzTraverseAction *actionclass , gzContext *context);
00144 
00145     GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzTraverseAction *actionclass , gzContext *context)=0;
00146 
00147     // ---------- Common graph functions --------------------------------
00148 
00150 
00154     GZ_GRAPH_EXPORT virtual gzVoid updateNode()=0;
00155 
00156     // ---------- No cloning of base - pure virtual ---------------------
00157 
00159 
00163     GZ_GRAPH_EXPORT virtual gzReference* clone() const=0;
00164 };
00165 
00167 enum gzWeightMethod
00168 {
00169     GZ_WEIGHT_START_TRANS,      
00170     GZ_WEIGHT_END_TRANS,        
00171     GZ_WEIGHT_MID_TRANS,        
00172     GZ_WEIGHT_START_END_TRANS,  
00173     GZ_WEIGHT_CONSTANT          
00174 };
00175 
00176 class gzIntersectorAction; // Forward decl
00177 
00178 //******************************************************************************
00179 // Class    : gzWeightGeomInfo
00180 //                                  
00181 // Purpose  : 
00182 //                                  
00183 // Notes    : - 
00184 //                                  
00185 // Revision History...                          
00186 //                                  
00187 // Who  Date    Description                     
00188 //                                  
00189 // AMO  021029  Created 
00190 //                                  
00191 //******************************************************************************
00192 class gzWeightGeomInfo : public gzMutex
00193 {
00194 public:
00195 
00196     gzWeightGeomInfo():currentUpdateID(0) {}
00197 
00198     gzArray<gzVec3>     currentCoordinates;
00199 
00200     gzArray<gzVec3>     currentNormals;
00201 
00202     gzULong             currentUpdateID;
00203 
00204 };
00205 
00206 enum gzVertexBufferType
00207 {
00208     GZ_VBO_DYNAMIC,
00209     GZ_VBO_STATIC,
00210     GZ_VBO_STATIC_DROP_LOCAL,
00211     GZ_VBO_SOMETIMES
00212 };
00213 
00214 class gzVertexBufferBindInfo
00215 {
00216 public:
00218     GZ_GRAPH_EXPORT gzVertexBufferBindInfo();
00219 
00221     GZ_GRAPH_EXPORT virtual ~gzVertexBufferBindInfo();
00222 
00223     gzUInt                          bindID;
00224     gzUInt                          indexBindID;
00225     gzULong                         contextEnumerator;
00226     gzRefPointer<gzRefIdStorage>    bindPool;
00227 
00228 };
00229 
00230 class gzVertexBufferInfo
00231 {
00232 public:
00233 
00235     GZ_GRAPH_EXPORT gzVertexBufferInfo();
00236 
00238     GZ_GRAPH_EXPORT ~gzVertexBufferInfo();
00239 
00240     gzVertexBufferType                      vboType;
00241     gzULong                                 entries;
00242     gzULong                                 index;
00243     gzBool                                  useEdges;
00244     gzDynamicArray<gzVertexBufferBindInfo>  bindInfo;
00245 };
00246 
00247 class gzVertexAttributeManager
00248 {
00249 public:
00250 
00252     GZ_GRAPH_EXPORT gzVertexAttributeManager();
00253 
00255     GZ_GRAPH_EXPORT virtual ~gzVertexAttributeManager(){};
00256 
00257     GZ_GRAPH_EXPORT gzVertexAttributeManager(const gzVertexAttributeManager &right);
00258 
00259     GZ_GRAPH_EXPORT const gzVertexAttributeManager & operator =(const gzVertexAttributeManager &right);
00260 
00261     GZ_GRAPH_EXPORT gzVoid activateOverall();
00262 
00263     GZ_GRAPH_EXPORT gzVoid activatePerPrim(gzULong index);
00264 
00265     GZ_GRAPH_EXPORT gzVoid deactivate();
00266 
00267     GZ_GRAPH_EXPORT gzVertexAttributeList *getVertexAttributeList(gzULong listIndex);
00268 
00270     GZ_GRAPH_EXPORT gzVoid remove(gzVertexAttributeList *list);
00271 
00273     GZ_GRAPH_EXPORT gzVoid removeAll();
00274 
00276     GZ_GRAPH_EXPORT gzVoid insert(gzVertexAttributeList *list);
00277 
00279 
00282     GZ_GRAPH_EXPORT gzBool isActive();
00283 
00285     GZ_GRAPH_EXPORT gzBool hasOverallBinding()  { return m_hasOverallBinding; }
00286 
00288     GZ_GRAPH_EXPORT gzBool hasPrimBinding()     { return m_hasPrimBinding; }
00289 
00291     GZ_GRAPH_EXPORT gzBool hasVertexBinding()   { return m_hasVertexBinding; }
00292 
00293     GZ_GRAPH_EXPORT gzVoid updateBindingInfo();
00294 
00295 
00296 private:
00297 
00298     gzRefList<gzVertexAttributeList>        m_attributes;
00299     gzListIterator<gzVertexAttributeList>   m_iterator;
00300     gzVertexAttributeList   *               m_item;
00301 
00302     gzBool                                  m_hasOverallBinding:1;
00303     gzBool                                  m_hasPrimBinding:1;
00304     gzBool                                  m_hasVertexBinding:1;
00305 
00306 };
00307 
00308 class gzWeightValue
00309 {
00310 public:
00311 
00313     GZ_GRAPH_EXPORT gzWeightValue(gzFloat value=GZ_FLOAT_ZERO,gzULong transformID=1);
00314 
00316 
00319     GZ_GRAPH_EXPORT gzBool operator!=(const gzWeightValue &right);
00320 
00321     gzULong transformID;
00322     gzFloat value;
00323 };
00324 
00325 class gzWeight
00326 {
00327 public:
00328 
00330     GZ_GRAPH_EXPORT gzWeight();
00331 
00333     GZ_GRAPH_EXPORT gzWeight(gzFloat val);
00334 
00336     GZ_GRAPH_EXPORT gzWeight(gzFloat val1,gzFloat val2);
00337 
00339 
00342     GZ_GRAPH_EXPORT gzBool operator==(const gzWeight &right);
00343 
00344     GZ_GRAPH_EXPORT gzWeightValue & operator[](gzULong index);
00345 
00346     gzArray<gzWeightValue>  weights;
00347 
00348 };
00349 
00350 //******************************************************************************
00351 // Class    : gzGeometry
00352 //                                  
00353 // Purpose  : -
00354 //                                  
00355 // Notes    : - 
00356 //                                  
00357 // Revision History...                          
00358 //                                  
00359 // Who  Date    Description                     
00360 //                                  
00361 // AMO  981122  Created 
00362 //                                  
00363 //******************************************************************************
00364 class gzGeometry : public gzBaseGeometry
00365 {
00366 public:
00367 
00369 
00372     GZ_GRAPH_EXPORT gzGeometry(const gzString & name=GZ_EMPTY_STRING);
00373 
00375     GZ_GRAPH_EXPORT virtual ~gzGeometry(){};
00376 
00377     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);  // typed interface
00378 
00379     // ---------- Clone interface ---------------------------------------
00380     
00382     GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00383     GZ_GRAPH_EXPORT virtual gzBool  useDeepCopy();
00384     
00385     // ---------- Geometry Interface ------------------------------------
00386 
00387     // ---------- General utilites --------------------------------------
00388     GZ_GRAPH_EXPORT virtual gzVoid  transform(gzMatrix4 &matrix);
00389 
00391 
00394     GZ_GRAPH_EXPORT virtual gzVoid  optimize(gzGeoOptimizeLevel level=GZ_GEO_OPTIMIZE_LEAVE_LINES);
00395 
00397 
00400     GZ_GRAPH_EXPORT gzBool  combineGeometry(gzGeometry *toCombineWith,gzBool optimize=TRUE);
00401     GZ_GRAPH_EXPORT gzVoid  combineFinalGeometry(gzBool optimize=TRUE);
00402     GZ_GRAPH_EXPORT gzVoid  combineInternalGeometry();
00403 
00404     GZ_GRAPH_EXPORT gzVoid  averageNormals(gzVertexGroupInfo *info=NULL,gzBool smoothAllIndex=FALSE);
00405     
00411     GZ_GRAPH_EXPORT gzVoid  generateNormals();
00412     GZ_GRAPH_EXPORT gzBool  generateTangents(gzULong textureUnit=0,gzULong vertexList=10);
00413     GZ_GRAPH_EXPORT gzVoid  generateWeights(const gzDouble &factor=1.0,gzUByte coordIndex=2,gzWeightMethod method=GZ_WEIGHT_START_TRANS,gzULong baseID=1,gzFloat baseWeight=GZ_FLOAT_ONE);
00414 
00415     GZ_GRAPH_EXPORT gzVoid  convertToIndexed();
00416     GZ_GRAPH_EXPORT gzVoid  convertToNonIndexed();
00417 
00418     // ----- weight info ------------------------
00419     GZ_GRAPH_EXPORT gzVoid  updateWeightInfo(gzContext *context);
00420     GZ_GRAPH_EXPORT gzBool  useVertexWeights();
00421     GZ_GRAPH_EXPORT gzWeightGeomInfo &getWeightInfo();
00422     GZ_GRAPH_EXPORT gzVoid  usePerfectWeightedNormals(gzBool on=FALSE);
00423     GZ_GRAPH_EXPORT gzVoid  smoothAllWeightedNormals(gzBool on=FALSE);
00424 
00425 
00426     // ----- Coordinate stuff -----------------------
00428     GZ_GRAPH_EXPORT gzArray<gzVec3> &   getCoordinateArray(gzBool changeData=TRUE);
00429 
00431     GZ_GRAPH_EXPORT gzArray<gzULong>&   getPrimLengthArray(gzBool changeData=TRUE);
00432 
00434     GZ_GRAPH_EXPORT gzArray<gzVec4> &   getColorArray(gzBool changeData=TRUE);
00435 
00437     GZ_GRAPH_EXPORT gzArray<gzVec3> &   getNormalArray(gzBool changeData=TRUE);
00438 
00440     GZ_GRAPH_EXPORT gzArray<gzVec2> &   getTexCoordinateArray(gzULong unit=0,gzBool changeData=TRUE);
00441 
00443 
00446     GZ_GRAPH_EXPORT gzArray<gzBool> &   getEdgeArray(gzBool changeData=TRUE);
00447 
00449     GZ_GRAPH_EXPORT gzArray<gzWeight>&  getWeightArray(gzBool changeData=TRUE);
00450 
00452 
00455     GZ_GRAPH_EXPORT gzArray<gzULong>&   getIndexArray(gzBool changeData=TRUE);
00456     
00457     GZ_GRAPH_EXPORT gzVoid  setTextureUnits( gzULong size=1 );
00458     GZ_GRAPH_EXPORT gzULong getTextureUnits();
00459 
00461     GZ_GRAPH_EXPORT gzArray<gzArray<gzVec2> >&  getTexCoordinateArrays(gzBool changeData=TRUE);
00462 
00463     // Normal array version
00464 
00466 
00469     GZ_GRAPH_EXPORT gzVoid  setCoordinateArray      ( const gzArray<gzVec3> & array);
00470     
00472 
00484     GZ_GRAPH_EXPORT gzVoid  setPrimLengthArray      ( const gzArray<gzULong>& array);
00485     
00487     GZ_GRAPH_EXPORT gzVoid  setColorArray           ( const gzArray<gzVec4> & array);
00488     
00490     GZ_GRAPH_EXPORT gzVoid  setNormalArray          ( const gzArray<gzVec3> & array);
00491     
00493     GZ_GRAPH_EXPORT gzVoid  setTexCoordinateArray   ( const gzArray<gzVec2> & array , gzULong unit=0);
00494     GZ_GRAPH_EXPORT gzVoid  setEdgeArray            ( const gzArray<gzBool> & array);
00495     GZ_GRAPH_EXPORT gzVoid  setWeightArray          ( const gzArray<gzWeight> & array);
00496 
00498 
00503     GZ_GRAPH_EXPORT gzVoid  setIndexArray           ( const gzArray<gzULong> & array);
00504 
00506     GZ_GRAPH_EXPORT gzVoid  setTexCoordinateArrays  (const gzArray<gzArray<gzVec2> > &array);
00507     
00508     // Dynamic array version
00509     
00511 
00514     GZ_GRAPH_EXPORT gzVoid  setCoordinateArray      ( const gzDynamicArray<gzVec3> & array);
00515     
00517 
00529     GZ_GRAPH_EXPORT gzVoid  setPrimLengthArray      ( const gzDynamicArray<gzULong>& array);
00530 
00532     GZ_GRAPH_EXPORT gzVoid  setColorArray           ( const gzDynamicArray<gzVec4> & array);
00533 
00535     GZ_GRAPH_EXPORT gzVoid  setNormalArray          ( const gzDynamicArray<gzVec3> & array);
00536     
00538     GZ_GRAPH_EXPORT gzVoid  setTexCoordinateArray   ( const gzDynamicArray<gzVec2> & array , gzULong unit=0);
00539     GZ_GRAPH_EXPORT gzVoid  setEdgeArray            ( const gzDynamicArray<gzBool> & array);
00540     GZ_GRAPH_EXPORT gzVoid  setWeightArray          ( const gzDynamicArray<gzWeight> & array);
00541 
00543 
00548     GZ_GRAPH_EXPORT gzVoid  setIndexArray           ( const gzDynamicArray<gzULong> & array);
00549 
00551     GZ_GRAPH_EXPORT gzVoid  setTexCoordinateArrays  ( const gzDynamicArray<gzArray<gzVec2> > &array);
00552 
00553     // Prim type
00554 
00556     GZ_GRAPH_EXPORT gzGeoPrimType getGeoPrimType();
00557     
00559     GZ_GRAPH_EXPORT gzVoid setGeoPrimType(gzGeoPrimType primtype);
00560 
00561     // Binding
00562 
00564     GZ_GRAPH_EXPORT gzGeoAttribBinding getNormalBind();
00565     
00567     GZ_GRAPH_EXPORT gzGeoAttribBinding getColorBind();
00568     
00570     GZ_GRAPH_EXPORT gzGeoAttribBinding getTexBind(gzULong unit=0);
00571 
00573     GZ_GRAPH_EXPORT gzArray<gzGeoAttribBinding> & getTexBindArray(gzBool changeData=TRUE);
00574 
00576     GZ_GRAPH_EXPORT gzVoid  setNormalBind( gzGeoAttribBinding binding);
00577     
00579     GZ_GRAPH_EXPORT gzVoid  setColorBind( gzGeoAttribBinding binding);
00580      
00582     GZ_GRAPH_EXPORT gzVoid  setTexBind( gzGeoAttribBinding binding,gzULong unit=0);
00583 
00585     GZ_GRAPH_EXPORT gzVoid  setTexBindArray( const gzArray<gzGeoAttribBinding> & binding);
00586 
00587     // Misc
00588     
00590     GZ_GRAPH_EXPORT gzFloat getPointSize();
00591     
00593     GZ_GRAPH_EXPORT gzVoid  setPointSize(gzFloat size);
00594 
00596     GZ_GRAPH_EXPORT gzFloat getLineWidth();
00597     
00599     GZ_GRAPH_EXPORT gzVoid  setLineWidth(gzFloat size);
00600 
00601     GZ_GRAPH_EXPORT gzVoid  useDisplayList(gzBool on);
00602     GZ_GRAPH_EXPORT gzBool  useDisplayList();
00603     GZ_GRAPH_EXPORT gzVoid  reCreateDisplayList();
00604 
00605     GZ_GRAPH_EXPORT gzVoid  useFastShadowRender(gzBool on);
00606     GZ_GRAPH_EXPORT gzBool  useFastShadowRender();
00607 
00608     // ---------- Common graph functions --------------------------------
00609 
00611     GZ_GRAPH_EXPORT virtual gzVoid updateNode();
00612 
00613     // ---------- Action Interface --------------------------------------
00614 
00615     GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzTraverseAction *actionclass , gzContext *context);
00616 
00617     // ---------- Serializing -------------------------------------------
00618 
00620     GZ_GRAPH_EXPORT virtual gzVoid write(gzSerializeAdapter *adapter);
00621 
00623     GZ_GRAPH_EXPORT virtual gzVoid read(gzSerializeAdapter *adapter);
00624 
00626     GZ_GRAPH_EXPORT virtual gzULong getDataSize(gzSerializeAdapter *adapter) const;
00627 
00628     // ---------- Debug output ------------------------------------------
00630 
00633     GZ_GRAPH_EXPORT virtual gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00634 
00635     // ---------- Vertex Attributes -------------------------------------
00636     
00637     GZ_GRAPH_EXPORT gzVoid addVertexAttributeList(gzVertexAttributeList *list);
00638     GZ_GRAPH_EXPORT gzVoid removeVertexAttributeList(gzVertexAttributeList *list);
00639     GZ_GRAPH_EXPORT gzVoid removeAllVertexAttributeLists();
00640     GZ_GRAPH_EXPORT gzVertexAttributeList *getVertexAttributeList(gzULong listIndex);
00641 
00642     // ---------- Vertex Buffer Object Control --------------------------
00643 
00644     GZ_GRAPH_EXPORT gzVoid setBind(gzBool bind,gzVertexBufferType type=GZ_VBO_STATIC);
00645     GZ_GRAPH_EXPORT gzVoid reBind();
00646     GZ_GRAPH_EXPORT gzBool isBind();
00647 
00648     // ---------- geometry utilities ------------------------------------
00649 
00651     GZ_GRAPH_EXPORT gzPolygonWinding polygonWinding(const gzVec3 &upVec=GZ_Z_VEC3);
00652 
00654     GZ_GRAPH_EXPORT gzBool  checkValidGeometry(gzBool notify=TRUE);
00655 
00657     GZ_GRAPH_EXPORT gzVoid  stitchGeometry(const gzVec3 &upVec=GZ_Z_VEC3,gzStitchSettings setting=GZ_STITCH_SETTING_DEFAULT,gzFloat maxdist=GZ_FLOAT_ONE);
00658 
00659 
00660     // ---------- Common context based utilities ------------------------
00661 
00662     GZ_GRAPH_EXPORT static gzVoid setMaxVBOInitsPerFrame(gzContext *context ,gzULong maxVal);
00663     GZ_GRAPH_EXPORT static gzVoid setMaxDisplayListsInitsPerFrame(gzContext *context ,gzULong maxVal);
00664 
00665 
00666 protected:
00667 
00668     friend class gzGeometryOptimizer;   // Friend declaration to geometry optimizer
00669 
00670     GZ_GRAPH_EXPORT gzVoid preTraverseBuffers(gzContext *context,gzBool useWeights);
00671     GZ_GRAPH_EXPORT gzVoid preTraverseStatistics(gzContext *context,gzBool useWeights,gzULong factor=1,gzBool renderStats=TRUE);
00672 
00673     gzFloat                                 m_pointSize;
00674     gzFloat                                 m_lineWidth;
00675 
00676     // Type
00677 
00678     gzGeoPrimType                           m_primType:5;
00679 
00680     // Binding data
00681 
00682     gzGeoAttribBinding                      m_normalBind:3;
00683     gzGeoAttribBinding                      m_colorBind:3;
00684 
00685     gzBool                                  m_useDisplayList:1;
00686     gzBool                                  m_recreateDisplayList:1;
00687     gzBool                                  m_usePerfectWeightedNormals:1;
00688     gzBool                                  m_smoothAllWeighedNormals:1;
00689     gzBool                                  m_fastShadowRender:1;
00690     gzBool                                  m_checkValidGeometry:1;
00691 
00692     gzDynamicArray<gzDisplayListInfo>       m_dispInfo;
00693     
00694     gzArray< gzGeoAttribBinding >           m_texBind;
00695     
00696     // Prim lengths
00697     gzArray<gzULong>                        m_length;
00698  
00699     gzArray<gzVec3>                         m_coordinates;
00700     gzArray<gzVec4>                         m_colors;
00701     gzArray<gzVec3>                         m_normals;
00702     gzArray<gzULong>                        m_index;
00703 
00704     gzArray< gzWeight >                     m_weights;
00705 
00706     gzArray< gzArray<gzVec2>    >           m_tex_coordinates;
00707 
00708     gzArray<gzBool>                         m_edges;
00709 
00710     gzLateBindData<gzWeightGeomInfo>        m_weightInfo;
00711 
00712 
00713     // Combined Info ----------------------------------
00714 
00715     class gzCombineInfo
00716     {
00717     public:
00718 
00719         gzCombineInfo():vertexCount(0){}
00720 
00721         gzRefList<gzGeometry>   combGeom;
00722 
00723         gzULong                 vertexCount;
00724     };
00725 
00726     gzLateBindData<gzCombineInfo>           m_combinedGeometry;
00727     
00728     // Vertex Attributes
00729     
00730     gzVertexAttributeManager                m_vertexAttributes;
00731 
00732     // Vertex buffer objects bindings
00733 
00734     gzLateBindData<gzVertexBufferInfo>      m_vboBindInfo;
00735 
00736 
00737     GZ_GRAPH_EXPORT gzVoid virtual calculateIntersections(gzIntersectorAction *isector , gzContext *context);
00738 
00739     GZ_GRAPH_EXPORT gzVoid virtual updateGeomInternals();
00740 
00741 private:
00742         
00743     gzVoid draw_POINTS(gzContext *context);
00744     gzVoid draw_LINES(gzContext *context);
00745     gzVoid draw_LINESTRIPS(gzContext *context);
00746     gzVoid draw_TRIS(gzContext *context);
00747     gzVoid draw_QUADS(gzContext *context);
00748     gzVoid draw_TRISTRIPS(gzContext *context);
00749     gzVoid draw_TRIFANS(gzContext *context);
00750     gzVoid draw_POLYS(gzContext *context);
00751     gzVoid draw_QUADSTRIPS(gzContext *context);
00752     gzVoid draw_LINELOOPS(gzContext *context);
00753 };
00754 
00755 // Declare smart pointer type
00756 GZ_DECLARE_REFPTR(gzGeometry);
00757 
00758 //******************************************************************************
00759 // Class    : gzTriGeometry
00760 //                                  
00761 // Purpose  : Special Geometry that consists of triangles
00762 //                                  
00763 // Notes    : - 
00764 //                                  
00765 // Revision History...                          
00766 //                                  
00767 // Who  Date    Description                     
00768 //                                  
00769 // AMO  990409  Created 
00770 //                                  
00771 //******************************************************************************
00774 class gzTriGeometry : public gzGeometry
00775 {
00776 public:
00777 
00779 
00782     GZ_GRAPH_EXPORT gzTriGeometry(const gzString & name=GZ_EMPTY_STRING);
00783 
00785     GZ_GRAPH_EXPORT virtual ~gzTriGeometry(){};
00786 
00787     //Sets a triangle.
00791     GZ_GRAPH_EXPORT gzVoid setTri(gzULong index , const gzVec3 &a , const gzVec3 &b , const gzVec3 &c);
00792 
00794     GZ_GRAPH_EXPORT gzVoid setSize(gzULong size);
00795 
00797     GZ_GRAPH_EXPORT gzVoid setColor( gzULong index , const gzVec4 &color);
00798 
00800     GZ_GRAPH_EXPORT gzVoid setColor( const gzVec4 &color );
00801 
00803 
00808     GZ_GRAPH_EXPORT gzVoid setEdge( gzULong index , gzBool ab , gzBool bc , gzBool ca );
00809     
00811     GZ_GRAPH_EXPORT gzVoid setTexCord(gzULong index , const gzVec2 &a , const gzVec2 &b , const gzVec2 &c , gzULong unit=0);
00812 
00814 
00817     GZ_GRAPH_EXPORT gzVoid setColor( gzULong index , const gzVec4 &col_a , const gzVec4 &col_b , const gzVec4 &col_c );
00818 
00820     GZ_GRAPH_EXPORT gzVoid calculateNormals();
00821 
00822     // ---------- Clone interface ---------------------------------------
00824     GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00825 
00826 private:
00827             
00828     gzULong m_size;
00829 
00830 };
00831 
00832 // Declare smart pointer type
00833 GZ_DECLARE_REFPTR(gzTriGeometry);
00834 
00835 //******************************************************************************
00836 // Class    : gzInstancedGeometry
00837 //                                  
00838 // Purpose  : Special Geometry that is repeated for multiple instances
00839 //                                  
00840 // Notes    : - 
00841 //                                  
00842 // Revision History...                          
00843 //                                  
00844 // Who  Date    Description                     
00845 //                                  
00846 // AMO  080211  Created 
00847 //                                  
00848 //******************************************************************************
00849 class gzInstancedGeometry : public gzGeometry
00850 {
00851 public:
00852 
00853     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);  // typed interface
00854 
00855     GZ_GRAPH_EXPORT gzInstancedGeometry(const gzString & name=GZ_EMPTY_STRING);
00856 
00857     GZ_GRAPH_EXPORT virtual ~gzInstancedGeometry(){};
00858 
00859     // ---------- Clone interface ---------------------------------------
00861     GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00862 
00864     GZ_GRAPH_EXPORT virtual gzVoid updateNode();
00865 
00866     // ---------- Action Interface --------------------------------------
00867 
00868     GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzTraverseAction *actionclass , gzContext *context);
00869 
00870     // --------- Properties ---------------------------------------------
00871 
00873     GZ_PROPERTY_EXPORT(gzULong,     Instances,      GZ_GRAPH_EXPORT);
00874 
00876     GZ_PROPERTY_EXPORT_(gzVec3,     Center,         GZ_GRAPH_EXPORT);
00877 
00879     GZ_PROPERTY_EXPORT_(gzReal,     Radius,         GZ_GRAPH_EXPORT);
00880 
00881 private:
00882         
00883     gzVoid draw_POINTS(gzContext *context);
00884     gzVoid draw_LINES(gzContext *context);
00885     gzVoid draw_LINESTRIPS(gzContext *context);
00886     gzVoid draw_TRIS(gzContext *context);
00887     gzVoid draw_QUADS(gzContext *context);
00888     gzVoid draw_TRISTRIPS(gzContext *context);
00889     gzVoid draw_TRIFANS(gzContext *context);
00890     gzVoid draw_POLYS(gzContext *context);
00891     gzVoid draw_QUADSTRIPS(gzContext *context);
00892     gzVoid draw_LINELOOPS(gzContext *context);
00893 };
00894 
00895 // Declare smart pointer type
00896 GZ_DECLARE_REFPTR(gzInstancedGeometry);
00897 
00898 #endif
00899 

Documentation for Gizmo3D generated at Wed Feb 20 11:54:05 2008 by   Saab Training Systems AB, ¸ (c) 2003-and beyond