Go to the documentation of this file.00001
00002
00003
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 }
00019
00020 namespace scene
00021 {
00023 enum E_COLLADA_TECHNIQUE_FX
00024 {
00027 ECTF_BLINN,
00029 ECTF_PHONG,
00031 ECTF_LAMBERT,
00032
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
00080 enum E_COLLADA_GEOMETRY_WRITING
00081 {
00083 ECGI_PER_MESH,
00084
00088 ECGI_PER_MESH_AND_MATERIAL
00089 };
00090
00092 class IColladaMeshWriterProperties : public virtual IReferenceCounted
00093 {
00094 public:
00095 virtual ~IColladaMeshWriterProperties () {}
00096
00098 virtual E_COLLADA_TECHNIQUE_FX getTechniqueFx(const video::SMaterial& material) const = 0;
00099
00101
00104 virtual s32 getTextureIdx(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
00105
00107
00111 virtual E_COLLADA_IRR_COLOR getColorMapping(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
00112
00114
00115 virtual video::SColor getCustomColor(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
00116
00118
00119 virtual E_COLLADA_TRANSPARENT_FX getTransparentFx(const video::SMaterial& material) const = 0;
00120
00122
00124 virtual f32 getTransparency(const video::SMaterial& material) const = 0;
00125
00127
00129 virtual f32 getReflectivity(const video::SMaterial& material) const = 0;
00130
00132
00134 virtual f32 getIndexOfRefraction(const video::SMaterial& material) const = 0;
00135
00138 virtual bool isExportable(const irr::scene::ISceneNode * node) const = 0;
00139
00142
00143 virtual IMesh* getMesh(irr::scene::ISceneNode * node) = 0;
00144
00146
00150 virtual bool useNodeMaterial(const scene::ISceneNode* node) const = 0;
00151
00152 };
00153
00155
00158 class IColladaMeshWriterNames : public virtual IReferenceCounted
00159 {
00160 public:
00161
00162 virtual ~IColladaMeshWriterNames () {}
00163
00165
00174 virtual irr::core::stringw nameForMesh(const scene::IMesh* mesh, int instance) = 0;
00175
00177
00183 virtual irr::core::stringw nameForNode(const scene::ISceneNode* node) = 0;
00184
00186
00196 virtual irr::core::stringw nameForMaterial(const video::SMaterial & material, int materialId, const scene::IMesh* mesh, const scene::ISceneNode* node) = 0;
00197 };
00198
00199
00201 class IColladaMeshWriter : public IMeshWriter
00202 {
00203 public:
00204
00205 IColladaMeshWriter()
00206 : Properties(0), DefaultProperties(0), NameGenerator(0), DefaultNameGenerator(0)
00207 , WriteTextures(true), WriteDefaultScene(true), ExportSMaterialOnce(true)
00208 , AmbientLight(0.f, 0.f, 0.f, 1.f)
00209 {
00210 }
00211
00213 virtual ~IColladaMeshWriter()
00214 {
00215 if ( Properties )
00216 Properties->drop();
00217 if ( DefaultProperties )
00218 DefaultProperties->drop();
00219 if ( NameGenerator )
00220 NameGenerator->drop();
00221 if ( DefaultNameGenerator )
00222 DefaultNameGenerator->drop();
00223 }
00224
00226 virtual bool writeScene(io::IWriteFile* file, scene::ISceneNode* root) = 0;
00227
00228
00230 virtual void setWriteTextures(bool write)
00231 {
00232 WriteTextures = write;
00233 }
00234
00236 virtual bool getWriteTextures() const
00237 {
00238 return WriteTextures;
00239 }
00240
00242
00246 virtual void setWriteDefaultScene(bool write)
00247 {
00248 WriteDefaultScene = write;
00249 }
00250
00252 virtual bool getWriteDefaultScene() const
00253 {
00254 return WriteDefaultScene;
00255 }
00256
00258 virtual void setAmbientLight(const video::SColorf &ambientColor)
00259 {
00260 AmbientLight = ambientColor;
00261 }
00262
00264 virtual video::SColorf getAmbientLight() const
00265 {
00266 return AmbientLight;
00267 }
00268
00270
00277 virtual void setGeometryWriting(E_COLLADA_GEOMETRY_WRITING writeStyle)
00278 {
00279 GeometryWriting = writeStyle;
00280 }
00281
00283 virtual E_COLLADA_GEOMETRY_WRITING getGeometryWriting() const
00284 {
00285 return GeometryWriting;
00286 }
00287
00289
00296 virtual void setExportSMaterialsOnlyOnce(bool exportOnce)
00297 {
00298 ExportSMaterialOnce = exportOnce;
00299 }
00300
00301 virtual bool getExportSMaterialsOnlyOnce() const
00302 {
00303 return ExportSMaterialOnce;
00304 }
00305
00307
00309 virtual void setProperties(IColladaMeshWriterProperties * p)
00310 {
00311 if ( p == Properties )
00312 return;
00313 if ( p )
00314 p->grab();
00315 if ( Properties )
00316 Properties->drop();
00317 Properties = p;
00318 }
00319
00321 virtual IColladaMeshWriterProperties * getProperties() const
00322 {
00323 return Properties;
00324 }
00325
00327
00328 IColladaMeshWriterProperties * getDefaultProperties() const
00329 {
00330 return DefaultProperties;
00331 }
00332
00334 virtual void setNameGenerator(IColladaMeshWriterNames * nameGenerator)
00335 {
00336 if ( nameGenerator == NameGenerator )
00337 return;
00338 if ( nameGenerator )
00339 nameGenerator->grab();
00340 if ( NameGenerator )
00341 NameGenerator->drop();
00342 NameGenerator = nameGenerator;
00343 }
00344
00346 virtual IColladaMeshWriterNames * getNameGenerator() const
00347 {
00348 return NameGenerator;
00349 }
00350
00352
00353 IColladaMeshWriterNames * getDefaultNameGenerator() const
00354 {
00355 return DefaultNameGenerator;
00356 }
00357
00359
00360 virtual irr::core::stringw toNCName(const irr::core::stringw& oldString, const irr::core::stringw& prefix=irr::core::stringw(L"_NC_")) const = 0;
00361
00362
00363 protected:
00364
00365 virtual void setDefaultProperties(IColladaMeshWriterProperties * p)
00366 {
00367 if ( p == DefaultProperties )
00368 return;
00369 if ( p )
00370 p->grab();
00371 if ( DefaultProperties )
00372 DefaultProperties->drop();
00373 DefaultProperties = p;
00374 }
00375
00376
00377 virtual void setDefaultNameGenerator(IColladaMeshWriterNames * p)
00378 {
00379 if ( p == DefaultNameGenerator )
00380 return;
00381 if ( p )
00382 p->grab();
00383 if ( DefaultNameGenerator )
00384 DefaultNameGenerator->drop();
00385 DefaultNameGenerator = p;
00386 }
00387
00388 private:
00389 IColladaMeshWriterProperties * Properties;
00390 IColladaMeshWriterProperties * DefaultProperties;
00391 IColladaMeshWriterNames * NameGenerator;
00392 IColladaMeshWriterNames * DefaultNameGenerator;
00393 bool WriteTextures;
00394 bool WriteDefaultScene;
00395 bool ExportSMaterialOnce;
00396 video::SColorf AmbientLight;
00397 E_COLLADA_GEOMETRY_WRITING GeometryWriting;
00398 };
00399
00400
00401 }
00402 }
00403
00404 #endif