IrrlichtEngine
IColladaMeshWriter.h
Go to the documentation of this file.
00001 // Copyright (C) 2002-2011 Nikolaus Gebhardt
00002 // This file is part of the "Irrlicht Engine".
00003 // For conditions of distribution and use, see copyright notice in irrlicht.h
00004 
00005 #ifndef __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__
00006 #define __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__
00007 
00008 #include "IMeshWriter.h"
00009 #include "ISceneNode.h"
00010 #include "IAnimatedMesh.h"
00011 #include "SMaterial.h"
00012 
00013 namespace irr
00014 {
00015 namespace io
00016 {
00017         class IWriteFile;
00018 } // end namespace io
00019 
00020 namespace scene
00021 {
00023         enum E_COLLADA_TECHNIQUE_FX
00024         {
00027                 ECTF_BLINN,     
00029                 ECTF_PHONG,
00031                 ECTF_LAMBERT,
00032                 // constantly shaded surface that is independent of lighting. 
00033                 ECTF_CONSTANT
00034         };
00035 
00037         enum E_COLLADA_TRANSPARENT_FX
00038         {
00040                 ECOF_A_ONE = 0,
00041 
00043                 ECOF_RGB_ZERO = 1
00044         };
00045 
00047         enum E_COLLADA_COLOR_SAMPLER
00048         {
00049                 ECCS_DIFFUSE,
00050                 ECCS_AMBIENT,
00051                 ECCS_EMISSIVE,
00052                 ECCS_SPECULAR,
00053                 ECCS_TRANSPARENT,
00054                 ECCS_REFLECTIVE
00055         };
00056 
00058         enum E_COLLADA_IRR_COLOR
00059         {
00061                 ECIC_NONE,
00062 
00064                 ECIC_CUSTOM,
00065 
00067                 ECIC_DIFFUSE,
00068 
00070                 ECIC_AMBIENT,
00071 
00073                 ECIC_EMISSIVE,
00074 
00076                 ECIC_SPECULAR
00077         };
00078 
00081         class IColladaMeshWriterProperties  : public virtual IReferenceCounted
00082         {
00083         public:
00084                 virtual ~IColladaMeshWriterProperties ()        {}
00085 
00087                 virtual E_COLLADA_TECHNIQUE_FX getTechniqueFx(const video::SMaterial& material) const = 0;
00088 
00090 
00093                 virtual s32 getTextureIdx(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
00094 
00096 
00100                 virtual E_COLLADA_IRR_COLOR getColorMapping(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
00101 
00103 
00104                 virtual video::SColor getCustomColor(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
00105 
00107 
00108                 virtual E_COLLADA_TRANSPARENT_FX getTransparentFx(const video::SMaterial& material) const = 0;
00109 
00111 
00113                 virtual f32 getTransparency(const video::SMaterial& material) const = 0;
00114 
00116 
00118                 virtual f32 getReflectivity(const video::SMaterial& material) const = 0;
00119 
00121 
00123                 virtual f32 getIndexOfRefraction(const video::SMaterial& material) const = 0;
00124 
00127                 virtual bool isExportable(const irr::scene::ISceneNode * node) const = 0;
00128 
00131                 virtual IMesh* getMesh(irr::scene::ISceneNode * node) = 0;
00132         };
00133 
00134 
00136         class IColladaMeshWriter : public IMeshWriter
00137         {
00138         public:
00139 
00140                 IColladaMeshWriter() : Properties(0), DefaultProperties(0), WriteTextures(true), WriteDefaultScene(false), AmbientLight(0.f, 0.f, 0.f, 1.f)
00141                 {
00142                 }
00143 
00145                 virtual ~IColladaMeshWriter() 
00146                 {
00147                         if ( Properties )
00148                                 Properties->drop();
00149                         if ( DefaultProperties )
00150                                 DefaultProperties->drop();
00151                 }
00152 
00154                 virtual bool writeScene(io::IWriteFile* file, scene::ISceneNode* root) = 0;
00155 
00156 
00158                 virtual void setWriteTextures(bool write)
00159                 {
00160                         WriteTextures = write;
00161                 }
00162 
00164                 virtual bool getWriteTextures() const 
00165                 {
00166                         return WriteTextures;
00167                 }
00168 
00170 
00174                 virtual void setWriteDefaultScene(bool write)
00175                 {
00176                         WriteDefaultScene = write;
00177                 }
00178 
00180                 virtual bool getWriteDefaultScene() const
00181                 {
00182                         return WriteDefaultScene;
00183                 }
00184 
00186                 virtual void setAmbientLight(const video::SColorf &ambientColor)
00187                 {
00188                         AmbientLight = ambientColor;
00189                 }
00190 
00192                 virtual video::SColorf getAmbientLight() const
00193                 {
00194                         return AmbientLight;
00195                 }
00196 
00198 
00200                 virtual void setProperties(IColladaMeshWriterProperties * p)
00201                 {
00202                         if ( p == Properties )
00203                                 return;
00204                         if ( p ) 
00205                                 p->grab();
00206                         if ( Properties )
00207                                 Properties->drop();
00208                         Properties = p;
00209                 }
00210 
00212                 virtual IColladaMeshWriterProperties * getProperties()
00213                 {
00214                         return Properties;
00215                 }
00216 
00218 
00219                 IColladaMeshWriterProperties * getDefaultProperties() const 
00220                 { 
00221                         return DefaultProperties; 
00222                 }
00223 
00224         protected:
00225                 // NOTE: you should also call setProperties
00226                 virtual void setDefaultProperties(IColladaMeshWriterProperties * p)
00227                 {
00228                         if ( p == DefaultProperties )
00229                                 return;
00230                         if ( p ) 
00231                                 p->grab();
00232                         if ( DefaultProperties )
00233                                 DefaultProperties->drop();
00234                         DefaultProperties = p;
00235                 }
00236 
00237         private:
00238                 IColladaMeshWriterProperties * Properties;
00239                 IColladaMeshWriterProperties * DefaultProperties;
00240                 bool WriteTextures;
00241                 bool WriteDefaultScene;
00242                 video::SColorf AmbientLight;
00243         };
00244 
00245 
00246 } // end namespace
00247 } // end namespace
00248 
00249 #endif