|
IrrlichtEngine
|
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