Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_SCENE_GEOMETRY_MESH_H_
00014 #define _FBXSDK_SCENE_GEOMETRY_MESH_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/core/base/fbxarray.h>
00019 #include <fbxsdk/scene/geometry/fbxgeometry.h>
00020
00021 #include <fbxsdk/fbxsdk_nsbegin.h>
00022
00032 class FBXSDK_DLL FbxMesh : public FbxGeometry
00033 {
00034 FBXSDK_OBJECT_DECLARE(FbxMesh, FbxGeometry);
00035
00036 public:
00039 virtual FbxNodeAttribute::EType GetAttributeType() const;
00040
00052 void BeginPolygon(int pMaterial=-1, int pTexture=-1, int pGroup=-1, bool pLegacy=true);
00053
00060 void BeginPolygonExt(int pMaterial, int* pTextures);
00061
00066 void AddPolygon(int pIndex, int pTextureUVIndex = -1);
00067
00069 void EndPolygon();
00070
00073 inline int GetPolygonCount() const { return mPolygons.GetCount(); }
00074
00078 inline int GetPolygonSize(int pPolygonIndex) const
00079 {
00080 return ( pPolygonIndex >= 0 && pPolygonIndex < mPolygons.GetCount() ) ? mPolygons[pPolygonIndex].mSize : -1;
00081 }
00082
00088 int GetPolygonGroup(int pPolygonIndex) const;
00089
00095 inline void SetPolygonGroup(int pPolygonIndex, int pGroup) const
00096 {
00097 if( pPolygonIndex >= 0 && pPolygonIndex<mPolygons.GetCount() ) mPolygons[pPolygonIndex].mGroup = pGroup;
00098 }
00099
00104 inline int GetPolygonVertex(int pPolygonIndex, int pPositionInPolygon) const
00105 {
00106 return ( pPolygonIndex >= 0 && pPolygonIndex < mPolygons.GetCount() && pPositionInPolygon >= 0 && pPositionInPolygon < mPolygons[pPolygonIndex].mSize ) ?
00107 mPolygonVertices[mPolygons[pPolygonIndex].mIndex + pPositionInPolygon] : -1;
00108 }
00109
00116 bool GetPolygonVertexNormal(int pPolyIndex, int pVertexIndex, FbxVector4& pNormal) const;
00117
00121 bool GetPolygonVertexNormals(FbxArray<FbxVector4>& pNormals) const;
00122
00130 bool GetPolygonVertexUV(int pPolyIndex, int pVertexIndex, const char* pUVSetName, FbxVector2& pUV) const;
00131
00136 bool GetPolygonVertexUVs(const char* pUVSetName, FbxArray<FbxVector2>& pUVs) const;
00137
00142 int* GetPolygonVertices() const;
00143
00148 inline int GetPolygonVertexCount() const { return mPolygonVertices.Size(); }
00149
00167 int GetPolygonVertexIndex(int pPolygonIndex) const;
00168
00174 int RemovePolygon(int pPolygonIndex);
00175
00181 int RemoveDuplicatedEdges(FbxArray<int>& pEdgeIndexList);
00183
00195 void InitTextureUV(int pCount, FbxLayerElement::EType pTypeIdentifier=FbxLayerElement::eTextureDiffuse);
00196
00203 void AddTextureUV(FbxVector2 pUV, FbxLayerElement::EType pTypeIdentifier=FbxLayerElement::eTextureDiffuse);
00204
00207 int GetTextureUVCount(FbxLayerElement::EType pTypeIdentifier=FbxLayerElement::eTextureDiffuse);
00208
00211 int GetUVLayerCount() const;
00212
00221 FbxArray<FbxLayerElement::EType> GetAllChannelUV(int pLayer);
00223
00241 void InitMaterialIndices(FbxLayerElement::EMappingMode pMappingMode);
00242
00254 void InitTextureIndices(FbxLayerElement::EMappingMode pMappingMode, FbxLayerElement::EType pTextureType);
00255
00270 void InitTextureUVIndices(FbxLayerElement::EMappingMode pMappingMode, FbxLayerElement::EType pTypeIdentifier=FbxLayerElement::eTextureDiffuse);
00271
00281 int GetTextureUVIndex(int pPolygonIndex, int pPositionInPolygon, FbxLayerElement::EType pTypeIdentifier=FbxLayerElement::eTextureDiffuse);
00282
00291 void SetTextureUVIndex(int pPolygonIndex, int pPositionInPolygon, int pIndex, FbxLayerElement::EType pTypeIdentifier);
00293
00298 void Reset();
00299
00303 void ComputeVertexNormals(bool pCW=false);
00304
00308 bool CheckIfVertexNormalsCCW();
00309
00311 class DuplicateVertex
00312 {
00313 public:
00314 DuplicateVertex() :
00315 lVertexPolyIndex(0),
00316 lNewVertexIndex(0),
00317 lNormal(0, 0, 0),
00318 lUV(0, 0),
00319 lEdgeIndex(0)
00320 {
00321 }
00322
00323 int lVertexPolyIndex;
00324 int lNewVertexIndex;
00325 FbxVector4 lNormal;
00326 FbxVector2 lUV;
00327 int lEdgeIndex;
00328 };
00329
00331 class VertexNormalInfo
00332 {
00333 public:
00334 VertexNormalInfo() :
00335 mTotalNormal(0, 0, 0),
00336 mNumNormal(0)
00337 {
00338 }
00339
00340 FbxVector4 mTotalNormal;
00341 int mNumNormal;
00342 };
00343
00346 bool CheckSamePointTwice() const;
00347
00352 int RemoveBadPolygons();
00354
00361 bool SplitPoints(FbxLayerElement::EType pTypeIdentifier=FbxLayerElement::eTextureDiffuse);
00362
00366 bool BuildMergeList(FbxArray<int>& pMergeList, bool pExport=false);
00367
00370 void MergePointsForPolygonVerteNormals(FbxArray<int> &pMergeList);
00372
00375
00376
00380
00389
00394
00399
00407
00413
00418
00423
00427
00432
00441
00454
00458
00461
00467
00478
00482
00484
00487
00491
00502
00507
00512
00517
00523
00528
00534
00539
00541
00547
00556
00566
00571
00575
00579
00584
00588
00592
00596
00600
00605
00609
00614
00618
00623
00627
00632
00634
00640
00645
00651
00656
00658
00670
00681
00692
00694
00698
00775