Irrlicht 3D Engine
IColladaMeshWriter.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4 
5 #ifndef __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__
6 #define __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__
7 
8 #include "IMeshWriter.h"
9 #include "ISceneNode.h"
10 #include "IAnimatedMesh.h"
11 #include "SMaterial.h"
12 
13 namespace irr
14 {
15 namespace io
16 {
17  class IWriteFile;
18 } // end namespace io
19 
20 namespace scene
21 {
24  {
32  // constantly shaded surface that is independent of lighting.
34  };
35 
38  {
41 
44  };
45 
48  {
55  };
56 
59  {
62 
65 
68 
71 
74 
77  };
78 
81  {
84 
89  };
90 
93  {
94  public:
96 
98  virtual E_COLLADA_TECHNIQUE_FX getTechniqueFx(const video::SMaterial& material) const = 0;
99 
101 
104  virtual s32 getTextureIdx(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
105 
107 
111  virtual E_COLLADA_IRR_COLOR getColorMapping(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
112 
114 
115  virtual video::SColor getCustomColor(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0;
116 
118 
119  virtual E_COLLADA_TRANSPARENT_FX getTransparentFx(const video::SMaterial& material) const = 0;
120 
122 
124  virtual f32 getTransparency(const video::SMaterial& material) const = 0;
125 
127 
129  virtual f32 getReflectivity(const video::SMaterial& material) const = 0;
130 
132 
134  virtual f32 getIndexOfRefraction(const video::SMaterial& material) const = 0;
135 
138  virtual bool isExportable(const irr::scene::ISceneNode * node) const = 0;
139 
142  // Note: Function is not const because there is no const getMesh() function.
143  virtual IMesh* getMesh(irr::scene::ISceneNode * node) = 0;
144 
146 
150  virtual bool useNodeMaterial(const scene::ISceneNode* node) const = 0;
151 
152  };
153 
155 
159  {
160  public:
161 
163 
165 
174  virtual irr::core::stringw nameForMesh(const scene::IMesh* mesh, int instance) = 0;
175 
177 
183  virtual irr::core::stringw nameForNode(const scene::ISceneNode* node) = 0;
184 
186 
196  virtual irr::core::stringw nameForMaterial(const video::SMaterial & material, int materialId, const scene::IMesh* mesh, const scene::ISceneNode* node) = 0;
197  };
198 
199 
202  {
203  public:
204 
206  : Properties(0), DefaultProperties(0), NameGenerator(0), DefaultNameGenerator(0)
207  , WriteTextures(true), WriteDefaultScene(true), ExportSMaterialOnce(true)
208  , AmbientLight(0.f, 0.f, 0.f, 1.f)
209  , GeometryWriting(ECGI_PER_MESH)
210  {
211  }
212 
215  {
216  if ( Properties )
217  Properties->drop();
218  if ( DefaultProperties )
219  DefaultProperties->drop();
220  if ( NameGenerator )
221  NameGenerator->drop();
222  if ( DefaultNameGenerator )
223  DefaultNameGenerator->drop();
224  }
225 
227  virtual bool writeScene(io::IWriteFile* file, scene::ISceneNode* root) = 0;
228 
229 
231  virtual void setWriteTextures(bool write)
232  {
233  WriteTextures = write;
234  }
235 
237  virtual bool getWriteTextures() const
238  {
239  return WriteTextures;
240  }
241 
243 
247  virtual void setWriteDefaultScene(bool write)
248  {
249  WriteDefaultScene = write;
250  }
251 
253  virtual bool getWriteDefaultScene() const
254  {
255  return WriteDefaultScene;
256  }
257 
259  virtual void setAmbientLight(const video::SColorf &ambientColor)
260  {
261  AmbientLight = ambientColor;
262  }
263 
266  {
267  return AmbientLight;
268  }
269 
271 
279  {
280  GeometryWriting = writeStyle;
281  }
282 
285  {
286  return GeometryWriting;
287  }
288 
290 
297  virtual void setExportSMaterialsOnlyOnce(bool exportOnce)
298  {
299  ExportSMaterialOnce = exportOnce;
300  }
301 
302  virtual bool getExportSMaterialsOnlyOnce() const
303  {
304  return ExportSMaterialOnce;
305  }
306 
308 
311  {
312  if ( p == Properties )
313  return;
314  if ( p )
315  p->grab();
316  if ( Properties )
317  Properties->drop();
318  Properties = p;
319  }
320 
323  {
324  return Properties;
325  }
326 
328 
330  {
331  return DefaultProperties;
332  }
333 
335  virtual void setNameGenerator(IColladaMeshWriterNames * nameGenerator)
336  {
337  if ( nameGenerator == NameGenerator )
338  return;
339  if ( nameGenerator )
340  nameGenerator->grab();
341  if ( NameGenerator )
342  NameGenerator->drop();
343  NameGenerator = nameGenerator;
344  }
345 
348  {
349  return NameGenerator;
350  }
351 
353 
355  {
356  return DefaultNameGenerator;
357  }
358 
360 
361  virtual irr::core::stringw toNCName(const irr::core::stringw& oldString, const irr::core::stringw& prefix=irr::core::stringw(L"_NC_")) const = 0;
362 
363 
364  protected:
365  // NOTE: You usually should also call setProperties with the same paraemter when using setDefaultProperties
367  {
368  if ( p == DefaultProperties )
369  return;
370  if ( p )
371  p->grab();
372  if ( DefaultProperties )
373  DefaultProperties->drop();
374  DefaultProperties = p;
375  }
376 
377  // NOTE: You usually should also call setNameGenerator with the same paraemter when using setDefaultProperties
379  {
380  if ( p == DefaultNameGenerator )
381  return;
382  if ( p )
383  p->grab();
384  if ( DefaultNameGenerator )
385  DefaultNameGenerator->drop();
386  DefaultNameGenerator = p;
387  }
388 
389  private:
390  IColladaMeshWriterProperties * Properties;
391  IColladaMeshWriterProperties * DefaultProperties;
392  IColladaMeshWriterNames * NameGenerator;
393  IColladaMeshWriterNames * DefaultNameGenerator;
394  bool WriteTextures;
395  bool WriteDefaultScene;
396  bool ExportSMaterialOnce;
397  video::SColorf AmbientLight;
398  E_COLLADA_GEOMETRY_WRITING GeometryWriting;
399  };
400 
401 
402 } // end namespace
403 } // end namespace
404 
405 #endif
irr::scene::IColladaMeshWriterProperties::~IColladaMeshWriterProperties
virtual ~IColladaMeshWriterProperties()
Definition: IColladaMeshWriter.h:95
irr::IReferenceCounted::grab
void grab() const
Grabs the object. Increments the reference counter by one.
Definition: IReferenceCounted.h:86
irr::scene::E_COLLADA_GEOMETRY_WRITING
E_COLLADA_GEOMETRY_WRITING
Control when geometry elements are created.
Definition: IColladaMeshWriter.h:80
irr::scene::E_COLLADA_IRR_COLOR
E_COLLADA_IRR_COLOR
Irrlicht colors which can be mapped to E_COLLADA_COLOR_SAMPLER values.
Definition: IColladaMeshWriter.h:58
irr::scene::IColladaMeshWriter::getWriteDefaultScene
virtual bool getWriteDefaultScene() const
Get if a default scene should be written.
Definition: IColladaMeshWriter.h:253
irr::scene::ECOF_A_ONE
@ ECOF_A_ONE
default - only alpha channel of color or texture is used.
Definition: IColladaMeshWriter.h:40
irr::scene::ECOF_RGB_ZERO
@ ECOF_RGB_ZERO
Alpha values for each RGB channel of color or texture are used.
Definition: IColladaMeshWriter.h:43
irr::scene::ECIC_NONE
@ ECIC_NONE
Don't write this element at all.
Definition: IColladaMeshWriter.h:61
IMeshWriter.h
irr::scene::IColladaMeshWriterNames::nameForMesh
virtual irr::core::stringw nameForMesh(const scene::IMesh *mesh, int instance)=0
Return a unique name for the given mesh.
irr::scene::IColladaMeshWriter::getDefaultNameGenerator
IColladaMeshWriterNames * getDefaultNameGenerator() const
Return the original default name generator of the writer.
Definition: IColladaMeshWriter.h:354
irr::scene::IColladaMeshWriter::setDefaultNameGenerator
virtual void setDefaultNameGenerator(IColladaMeshWriterNames *p)
Definition: IColladaMeshWriter.h:378
irr::scene::IColladaMeshWriter::getExportSMaterialsOnlyOnce
virtual bool getExportSMaterialsOnlyOnce() const
Definition: IColladaMeshWriter.h:302
irr::IReferenceCounted::drop
bool drop() const
Drops the object. Decrements the reference counter by one.
Definition: IReferenceCounted.h:116
irr::scene::ECTF_CONSTANT
@ ECTF_CONSTANT
Definition: IColladaMeshWriter.h:33
IAnimatedMesh.h
irr::scene::ECIC_AMBIENT
@ ECIC_AMBIENT
Use SMaterial::AmbientColor.
Definition: IColladaMeshWriter.h:70
irr::scene::IColladaMeshWriter::setProperties
virtual void setProperties(IColladaMeshWriterProperties *p)
Set properties to use by the meshwriter instead of it's default properties.
Definition: IColladaMeshWriter.h:310
irr::scene::IColladaMeshWriter::toNCName
virtual irr::core::stringw toNCName(const irr::core::stringw &oldString, const irr::core::stringw &prefix=irr::core::stringw(L"_NC_")) const =0
Restrict the characters of oldString a set of allowed characters in xs::NCName and add the prefix.
irr::scene::IColladaMeshWriterProperties::getTransparentFx
virtual E_COLLADA_TRANSPARENT_FX getTransparentFx(const video::SMaterial &material) const =0
Return the transparence color interpretation.
irr::scene::ECIC_SPECULAR
@ ECIC_SPECULAR
Use SMaterial::SpecularColor.
Definition: IColladaMeshWriter.h:76
ISceneNode.h
irr::scene::ECIC_CUSTOM
@ ECIC_CUSTOM
Check IColladaMeshWriterProperties for custom color.
Definition: IColladaMeshWriter.h:64
irr::scene::IColladaMeshWriterProperties::getIndexOfRefraction
virtual f32 getIndexOfRefraction(const video::SMaterial &material) const =0
Return index of refraction for that material.
irr::scene::ECTF_BLINN
@ ECTF_BLINN
Definition: IColladaMeshWriter.h:27
irr::scene::ECCS_REFLECTIVE
@ ECCS_REFLECTIVE
Definition: IColladaMeshWriter.h:54
irr::scene::IColladaMeshWriterNames
Callback interface to use custom names on collada writing.
Definition: IColladaMeshWriter.h:158
irr::scene::IColladaMeshWriter::getProperties
virtual IColladaMeshWriterProperties * getProperties() const
Get properties which are currently used.
Definition: IColladaMeshWriter.h:322
irr::s32
signed int s32
32 bit signed variable.
Definition: irrTypes.h:66
irr::scene::ECCS_SPECULAR
@ ECCS_SPECULAR
Definition: IColladaMeshWriter.h:52
irr::scene::E_COLLADA_TECHNIQUE_FX
E_COLLADA_TECHNIQUE_FX
Lighting models - more or less the way Collada categorizes materials.
Definition: IColladaMeshWriter.h:23
irr::scene::IColladaMeshWriter
Interface for writing meshes.
Definition: IColladaMeshWriter.h:201
irr::video::SColorf
Class representing a color with four floats.
Definition: SColor.h:458
irr::scene::IColladaMeshWriter::IColladaMeshWriter
IColladaMeshWriter()
Definition: IColladaMeshWriter.h:205
irr::scene::IColladaMeshWriter::getGeometryWriting
virtual E_COLLADA_GEOMETRY_WRITING getGeometryWriting() const
Get the current style of geometry writing.
Definition: IColladaMeshWriter.h:284
irr::scene::IColladaMeshWriter::getWriteTextures
virtual bool getWriteTextures() const
Get if texture information should be written.
Definition: IColladaMeshWriter.h:237
irr::scene::ECCS_EMISSIVE
@ ECCS_EMISSIVE
Definition: IColladaMeshWriter.h:51
irr::IReferenceCounted
Base class of most objects of the Irrlicht Engine.
Definition: IReferenceCounted.h:41
irr::scene::IColladaMeshWriterProperties::getCustomColor
virtual video::SColor getCustomColor(const video::SMaterial &material, E_COLLADA_COLOR_SAMPLER cs) const =0
Return custom colors for certain color types requested by collada.
irr::io::IWriteFile
Interface providing write access to a file.
Definition: IWriteFile.h:17
irr::f32
float f32
32 bit floating point variable.
Definition: irrTypes.h:104
irr::scene::IColladaMeshWriter::getNameGenerator
virtual IColladaMeshWriterNames * getNameGenerator() const
Get currently used name generator.
Definition: IColladaMeshWriter.h:347
irr::scene::IColladaMeshWriterProperties::getTextureIdx
virtual s32 getTextureIdx(const video::SMaterial &material, E_COLLADA_COLOR_SAMPLER cs) const =0
Which texture index should be used when writing the texture of the given sampler color.
irr::scene::IColladaMeshWriter::setWriteDefaultScene
virtual void setWriteDefaultScene(bool write)
Set if a default scene should be written when writing meshes.
Definition: IColladaMeshWriter.h:247
irr::scene::IColladaMeshWriter::~IColladaMeshWriter
virtual ~IColladaMeshWriter()
Destructor.
Definition: IColladaMeshWriter.h:214
irr::scene::IColladaMeshWriterNames::nameForNode
virtual irr::core::stringw nameForNode(const scene::ISceneNode *node)=0
Return a unique name for the given node.
irr::scene::ECGI_PER_MESH
@ ECGI_PER_MESH
Default - write each mesh exactly once to collada. Optimal but will not work with many tools.
Definition: IColladaMeshWriter.h:83
irr::scene::ECGI_PER_MESH_AND_MATERIAL
@ ECGI_PER_MESH_AND_MATERIAL
Definition: IColladaMeshWriter.h:88
irr::scene::ECIC_EMISSIVE
@ ECIC_EMISSIVE
Use SMaterial::EmissiveColor.
Definition: IColladaMeshWriter.h:73
irr::scene::IMesh
Class which holds the geometry of an object.
Definition: IMesh.h:23
irr::scene::IColladaMeshWriter::setDefaultProperties
virtual void setDefaultProperties(IColladaMeshWriterProperties *p)
Definition: IColladaMeshWriter.h:366
irr::scene::E_COLLADA_TRANSPARENT_FX
E_COLLADA_TRANSPARENT_FX
How to interpret the opacity in collada.
Definition: IColladaMeshWriter.h:37
irr::scene::IColladaMeshWriterProperties::useNodeMaterial
virtual bool useNodeMaterial(const scene::ISceneNode *node) const =0
Return if the node has it's own material overwriting the mesh-materials.
irr::scene::IColladaMeshWriterProperties::getColorMapping
virtual E_COLLADA_IRR_COLOR getColorMapping(const video::SMaterial &material, E_COLLADA_COLOR_SAMPLER cs) const =0
Return which color from Irrlicht should be used for the color requested by collada.
irr::core::string
Definition: irrString.h:73
irr::scene::ECIC_DIFFUSE
@ ECIC_DIFFUSE
Use SMaterial::DiffuseColor.
Definition: IColladaMeshWriter.h:67
irr
Everything in the Irrlicht Engine can be found in this namespace.
Definition: aabbox3d.h:12
irr::scene::E_COLLADA_COLOR_SAMPLER
E_COLLADA_COLOR_SAMPLER
Color names collada uses in it's color samplers.
Definition: IColladaMeshWriter.h:47
irr::scene::IColladaMeshWriterProperties::getReflectivity
virtual f32 getReflectivity(const video::SMaterial &material) const =0
Reflectivity value for that material.
irr::scene::IMeshWriter
Interface for writing meshes.
Definition: IMeshWriter.h:23
irr::scene::IColladaMeshWriterProperties::isExportable
virtual bool isExportable(const irr::scene::ISceneNode *node) const =0
irr::scene::IColladaMeshWriterProperties
Callback interface for properties which can be used to influence collada writing.
Definition: IColladaMeshWriter.h:92
irr::scene::IColladaMeshWriter::setAmbientLight
virtual void setAmbientLight(const video::SColorf &ambientColor)
Sets ambient color of the scene to write.
Definition: IColladaMeshWriter.h:259
irr::scene::IColladaMeshWriterNames::~IColladaMeshWriterNames
virtual ~IColladaMeshWriterNames()
Definition: IColladaMeshWriter.h:162
irr::scene::IColladaMeshWriter::setGeometryWriting
virtual void setGeometryWriting(E_COLLADA_GEOMETRY_WRITING writeStyle)
Control when and how often a mesh is written.
Definition: IColladaMeshWriter.h:278
irr::scene::ECTF_PHONG
@ ECTF_PHONG
Phong shading, default in many external renderers.
Definition: IColladaMeshWriter.h:29
irr::scene::IColladaMeshWriterProperties::getMesh
virtual IMesh * getMesh(irr::scene::ISceneNode *node)=0
irr::scene::IColladaMeshWriterProperties::getTechniqueFx
virtual E_COLLADA_TECHNIQUE_FX getTechniqueFx(const video::SMaterial &material) const =0
Which lighting model should be used in the technique (FX) section when exporting effects (materials)
irr::scene::IColladaMeshWriter::setWriteTextures
virtual void setWriteTextures(bool write)
Set if texture information should be written.
Definition: IColladaMeshWriter.h:231
irr::video::SMaterial
Struct for holding parameters for a material renderer.
Definition: SMaterial.h:226
irr::scene::ECCS_DIFFUSE
@ ECCS_DIFFUSE
Definition: IColladaMeshWriter.h:49
irr::scene::ECCS_TRANSPARENT
@ ECCS_TRANSPARENT
Definition: IColladaMeshWriter.h:53
irr::scene::IColladaMeshWriter::writeScene
virtual bool writeScene(io::IWriteFile *file, scene::ISceneNode *root)=0
writes a scene starting with the given node
irr::scene::ECCS_AMBIENT
@ ECCS_AMBIENT
Definition: IColladaMeshWriter.h:50
irr::scene::IColladaMeshWriterProperties::getTransparency
virtual f32 getTransparency(const video::SMaterial &material) const =0
Transparency value for that material.
irr::scene::IColladaMeshWriter::getAmbientLight
virtual video::SColorf getAmbientLight() const
Return ambient light of the scene which is written.
Definition: IColladaMeshWriter.h:265
irr::scene::IColladaMeshWriter::getDefaultProperties
IColladaMeshWriterProperties * getDefaultProperties() const
Return the original default properties of the writer.
Definition: IColladaMeshWriter.h:329
irr::video::SColor
Class representing a 32 bit ARGB color.
Definition: SColor.h:201
irr::scene::ISceneNode
Scene node interface.
Definition: ISceneNode.h:40
irr::scene::IColladaMeshWriter::setExportSMaterialsOnlyOnce
virtual void setExportSMaterialsOnlyOnce(bool exportOnce)
Make certain there is only one collada material generated per Irrlicht material.
Definition: IColladaMeshWriter.h:297
irr::scene::IColladaMeshWriterNames::nameForMaterial
virtual irr::core::stringw nameForMaterial(const video::SMaterial &material, int materialId, const scene::IMesh *mesh, const scene::ISceneNode *node)=0
Return a name for the material.
SMaterial.h
irr::scene::ECTF_LAMBERT
@ ECTF_LAMBERT
diffuse shaded surface that is independent of lighting.
Definition: IColladaMeshWriter.h:31
irr::scene::IColladaMeshWriter::setNameGenerator
virtual void setNameGenerator(IColladaMeshWriterNames *nameGenerator)
Install a generator to create custom names on export.
Definition: IColladaMeshWriter.h:335