00001
00004 #ifndef FBXFILESDK_KFBXPLUGINS_KFBXMATERIALCONVERTER_H
00005 #define FBXFILESDK_KFBXPLUGINS_KFBXMATERIALCONVERTER_H
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 #include <fbxfilesdk/components/kbaselib/kaydaradef_h.h>
00043 #include <fbxfilesdk/components/kbaselib/kaydara.h>
00044
00045 #include <fbxfilesdk/kfbxplugins/kfbxlayer.h>
00046
00047 #include <fbxfilesdk/components/kbaselib/klib/kpair.h>
00048
00049 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00050
00051 class KFbxObject;
00052 class KFbxSdkManager;
00053 class KFbxScene;
00054 class KFbxGeometry;
00055 class KFbxLayer;
00056 class KFbxSurfaceMaterial;
00057 class KFbxLayeredTexture;
00058 class KFbxTexture;
00059
00060 class LayerConfig;
00061
00062 class KFbxMaterialConverterImpl;
00063
00069 class KFBX_DLL KFbxMaterialConverter
00070 {
00071 public:
00072 KFbxMaterialConverter( KFbxSdkManager& mManager, KFbxSurfaceMaterial* pDefaultMaterial = NULL);
00073 ~KFbxMaterialConverter();
00074
00081 bool ConnectTexturesToMaterials( KFbxScene& pScene );
00082
00090 bool AssignTexturesToLayerElements( KFbxScene& pScene );
00091
00093
00094
00095
00096
00097
00098
00100
00101 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00102
00103 private:
00104
00105 typedef KPair<KFbxTexture*, KFbxLayerElementTexture::EBlendMode> TexData;
00106
00107 KFbxSdkManager& mManager;
00108 KFbxSurfaceMaterial* mDefaultMaterial;
00109 KFbxMaterialConverterImpl* mImpl;
00110
00111
00112 void GetTextures( int pComponent, KFbxLayer* pLayer, LayerConfig& pLayerConfig ) const;
00113 KFbxSurfaceMaterial* GetMaterial( int pComponent, KFbxLayer* pLayer, KFbxNode* pNode, bool pLookOnNode );
00114 int GetMaterialOrder( int pComponent, KFbxLayer* pLayer, KFbxNode* pNode, bool pLookOnNode );
00115
00116 bool HasGoodMappingModes( KFbxNode* pNode, KFbxGeometry* pGeom ) const;
00117 void ConnectTextures( KFbxSurfaceMaterial* pMat, KFbxObject* pTexture, int pTextureType ) const;
00118 bool HasPerFaceMaterialMapping( KFbxGeometry* pGeom ) const;
00119 void SetTextureUVSets( KFbxGeometry* pGeom ) const;
00120 bool HasTextures( KFbxGeometry* pGeom ) const;
00121 bool ConnectTexturesToMaterials( KFbxNode* pNode );
00122
00123 void GetTextureList( KArrayTemplate<TexData>& pTextures, KFbxLayeredTexture* pTex ) const;
00124
00125 KFbxLayer* FindLayerForTexture( KFbxTexture* pTex,
00126 KFbxLayerElement::ELayerElementType pTexType,
00127 KFbxLayerElementTexture::EBlendMode pTexBlendMode,
00128 KFbxGeometry* pGeom,
00129 int lComponentIndex,
00130 int lStartIndex = 0 ) const;
00131
00132 void InitTextureElement( KFbxLayerElementTexture* pTexElm, int pComponentCount,
00133 KFbxLayerElementTexture::EBlendMode pMode) const;
00134
00135 bool AssignTexturesToLayerElements( KFbxNode* pNode);
00136
00137 bool HasTextureLayerElements( KFbxGeometry& pGeom ) const;
00138
00139 void ConvertToPerFaceMapping( KFbxMesh* pGeom ) const;
00140
00141 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00142 };
00143
00144 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00145
00146 #endif // FBXFILESDK_KFBXPLUGINS_KFBXMATERIALCONVERTER_H
00147