00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
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
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
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 class gzVertexGroupInfo
00110 {
00111 public:
00112 gzArray<gzULong> groupID;
00113 gzArray<gzULong> connections;
00114 };
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 class gzBaseGeometry : public gzNode
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);
00140
00141
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
00148
00150
00154 GZ_GRAPH_EXPORT virtual gzVoid updateNode()=0;
00155
00156
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;
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
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
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
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);
00378
00379
00380
00382 GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00383 GZ_GRAPH_EXPORT virtual gzBool useDeepCopy();
00384
00385
00386
00387
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
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
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
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
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
00554
00556 GZ_GRAPH_EXPORT gzGeoPrimType getGeoPrimType();
00557
00559 GZ_GRAPH_EXPORT gzVoid setGeoPrimType(gzGeoPrimType primtype);
00560
00561
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
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
00609
00611 GZ_GRAPH_EXPORT virtual gzVoid updateNode();
00612
00613
00614
00615 GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzTraverseAction *actionclass , gzContext *context);
00616
00617
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
00630
00633 GZ_GRAPH_EXPORT virtual gzVoid debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00634
00635
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
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
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
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;
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
00677
00678 gzGeoPrimType m_primType:5;
00679
00680
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
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
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
00729
00730 gzVertexAttributeManager m_vertexAttributes;
00731
00732
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
00756 GZ_DECLARE_REFPTR(gzGeometry);
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
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
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
00824 GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00825
00826 private:
00827
00828 gzULong m_size;
00829
00830 };
00831
00832
00833 GZ_DECLARE_REFPTR(gzTriGeometry);
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849 class gzInstancedGeometry : public gzGeometry
00850 {
00851 public:
00852
00853 GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);
00854
00855 GZ_GRAPH_EXPORT gzInstancedGeometry(const gzString & name=GZ_EMPTY_STRING);
00856
00857 GZ_GRAPH_EXPORT virtual ~gzInstancedGeometry(){};
00858
00859
00861 GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00862
00864 GZ_GRAPH_EXPORT virtual gzVoid updateNode();
00865
00866
00867
00868 GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzTraverseAction *actionclass , gzContext *context);
00869
00870
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
00896 GZ_DECLARE_REFPTR(gzInstancedGeometry);
00897
00898 #endif
00899