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 , GeometryWriting(ECGI_PER_MESH)
00210 {
00211 }
00212
00214 virtual ~IColladaMeshWriter()
00215 {
00216 if ( Properties )
00217 Properties->drop();
00218 if ( DefaultProperties )
00219 DefaultProperties->drop();
00220 if ( NameGenerator )
00221 NameGenerator->drop();
00222 if ( DefaultNameGenerator )
00223 DefaultNameGenerator->drop();
00224 }
00225
00227 virtual bool writeScene(io::IWriteFile* file, scene::ISceneNode* root) = 0;
00228
00229
00231 virtual void setWriteTextures(bool write)
00232 {
00233 WriteTextures = write;
00234 }
00235
00237 virtual bool getWriteTextures() const
00238 {
00239 return WriteTextures;
00240 }
00241
00243
00247 virtual void setWriteDefaultScene(bool write)
00248 {
00249 WriteDefaultScene = write;
00250 }
00251
00253 virtual bool getWriteDefaultScene() const
00254 {
00255 return WriteDefaultScene;
00256 }
00257
00259 virtual void setAmbientLight(const video::SColorf &ambientColor)
00260 {
00261 AmbientLight = ambientColor;
00262 }
00263
00265 virtual video::SColorf getAmbientLight() const
00266 {
00267 return AmbientLight;
00268 }
00269
00271
00278 virtual void setGeometryWriting(E_COLLADA_GEOMETRY_WRITING writeStyle)
00279 {
00280 GeometryWriting = writeStyle;
00281 }
00282
00284 virtual E_COLLADA_GEOMETRY_WRITING getGeometryWriting() const
00285 {
00286 return GeometryWriting;
00287 }
00288
00290
00297 virtual void setExportSMaterialsOnlyOnce(bool exportOnce)
00298 {
00299 ExportSMaterialOnce = exportOnce;
00300 }
00301
00302 virtual bool getExportSMaterialsOnlyOnce() const
00303 {
00304 return ExportSMaterialOnce;
00305 }
00306
00308
00310 virtual void setProperties(IColladaMeshWriterProperties * p)
00311 {
00312 if ( p == Properties )
00313 return;
00314 if ( p )
00315 p->grab();
00316 if ( Properties )
00317 Properties->drop();
00318 Properties = p;
00319 }
00320
00322 virtual IColladaMeshWriterProperties * getProperties() const
00323 {
00324 return Properties;
00325 }
00326
00328
00329 IColladaMeshWriterProperties * getDefaultProperties() const
00330 {
00331 return DefaultProperties;
00332 }
00333
00335 virtual void setNameGenerator(IColladaMeshWriterNames * nameGenerator)
00336 {
00337 if ( nameGenerator == NameGenerator )
00338 return;
00339 if ( nameGenerator )
00340 nameGenerator->grab();
00341 if ( NameGenerator )
00342 NameGenerator->drop();
00343 NameGenerator = nameGenerator;
00344 }
00345
00347 virtual IColladaMeshWriterNames * getNameGenerator() const
00348 {
00349 return NameGenerator;
00350 }
00351
00353
00354 IColladaMeshWriterNames * getDefaultNameGenerator() const
00355 {
00356 return DefaultNameGenerator;
00357 }
00358
00360
00361 virtual irr::core::stringw toNCName(const irr::core::stringw& oldString, const irr::core::stringw& prefix=irr::core::stringw(L"_NC_")) const = 0;
00362
00363
00364 protected:
00365
00366 virtual void setDefaultProperties(IColladaMeshWriterProperties * p)
00367 {
00368 if ( p == DefaultProperties )
00369 return;
00370 if ( p )
00371 p->grab();
00372 if ( DefaultProperties )
00373 DefaultProperties->drop();
00374 DefaultProperties = p;
00375 }
00376
00377
00378 virtual void setDefaultNameGenerator(IColladaMeshWriterNames * p)
00379 {
00380 if ( p == DefaultNameGenerator )
00381 return;
00382 if ( p )
00383 p->grab();
00384 if ( DefaultNameGenerator )
00385 DefaultNameGenerator->drop();
00386 DefaultNameGenerator = p;
00387 }
00388
00389 private:
00390 IColladaMeshWriterProperties * Properties;
00391 IColladaMeshWriterProperties * DefaultProperties;
00392 IColladaMeshWriterNames * NameGenerator;
00393 IColladaMeshWriterNames * DefaultNameGenerator;
00394 bool WriteTextures;
00395 bool WriteDefaultScene;
00396 bool ExportSMaterialOnce;
00397 video::SColorf AmbientLight;
00398 E_COLLADA_GEOMETRY_WRITING GeometryWriting;
00399 };
00400
00401
00402 }
00403 }
00404
00405 #endif