Irrlicht 3D Engine
 
Loading...
Searching...
No Matches
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
13namespace irr
14{
15namespace io
16{
17 class IWriteFile;
18} // end namespace io
19
20namespace scene
21{
24 {
32 // constantly shaded surface that is independent of lighting.
34 };
35
45
56
78
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
112
114
116
118
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.
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
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
Base class of most objects of the Irrlicht Engine.
bool drop() const
Drops the object. Decrements the reference counter by one.
void grab() const
Grabs the object. Increments the reference counter by one.
Axis aligned bounding box in 3d dimensional space.
Definition aabbox3d.h:22
Interface providing write access to a file.
Definition IWriteFile.h:18
Interface for writing meshes.
IColladaMeshWriterProperties * getDefaultProperties() const
Return the original default properties of the writer.
virtual IColladaMeshWriterNames * getNameGenerator() const
Get currently used name generator.
virtual void setGeometryWriting(E_COLLADA_GEOMETRY_WRITING writeStyle)
Control when and how often a mesh is written.
virtual void setWriteTextures(bool write)
Set if texture information should be written.
virtual bool getWriteDefaultScene() const
Get if a default scene should be written.
virtual void setAmbientLight(const video::SColorf &ambientColor)
Sets ambient color of the scene to write.
virtual bool getWriteTextures() const
Get if texture information should be written.
IColladaMeshWriterNames * getDefaultNameGenerator() const
Return the original default name generator of the writer.
virtual IColladaMeshWriterProperties * getProperties() const
Get properties which are currently used.
virtual void setNameGenerator(IColladaMeshWriterNames *nameGenerator)
Install a generator to create custom names on export.
virtual ~IColladaMeshWriter()
Destructor.
virtual void setDefaultProperties(IColladaMeshWriterProperties *p)
virtual E_COLLADA_GEOMETRY_WRITING getGeometryWriting() const
Get the current style of geometry writing.
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.
virtual void setWriteDefaultScene(bool write)
Set if a default scene should be written when writing meshes.
virtual void setProperties(IColladaMeshWriterProperties *p)
Set properties to use by the meshwriter instead of it's default properties.
virtual bool writeScene(io::IWriteFile *file, scene::ISceneNode *root)=0
writes a scene starting with the given node
virtual bool getExportSMaterialsOnlyOnce() const
virtual video::SColorf getAmbientLight() const
Return ambient light of the scene which is written.
virtual void setDefaultNameGenerator(IColladaMeshWriterNames *p)
virtual void setExportSMaterialsOnlyOnce(bool exportOnce)
Make certain there is only one collada material generated per Irrlicht material.
Callback interface to use custom names on collada writing.
virtual irr::core::stringw nameForMesh(const scene::IMesh *mesh, int instance)=0
Return a unique name for the given mesh.
virtual irr::core::stringw nameForNode(const scene::ISceneNode *node)=0
Return a unique name for the given node.
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.
Callback interface for properties which can be used to influence collada writing.
virtual E_COLLADA_TRANSPARENT_FX getTransparentFx(const video::SMaterial &material) const =0
Return the transparence color interpretation.
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.
virtual IMesh * getMesh(irr::scene::ISceneNode *node)=0
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.
virtual bool useNodeMaterial(const scene::ISceneNode *node) const =0
Return if the node has it's own material overwriting the mesh-materials.
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.
virtual f32 getIndexOfRefraction(const video::SMaterial &material) const =0
Return index of refraction for that material.
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)
virtual f32 getTransparency(const video::SMaterial &material) const =0
Transparency value for that material.
virtual f32 getReflectivity(const video::SMaterial &material) const =0
Reflectivity value for that material.
virtual bool isExportable(const irr::scene::ISceneNode *node) const =0
Class which holds the geometry of an object.
Definition IMesh.h:24
Interface for writing meshes.
Definition IMeshWriter.h:24
Scene node interface.
Definition ISceneNode.h:41
Class representing a 32 bit ARGB color.
Definition SColor.h:202
Class representing a color with four floats.
Definition SColor.h:459
Struct for holding parameters for a material renderer.
Definition SMaterial.h:227
E_COLLADA_GEOMETRY_WRITING
Control when geometry elements are created.
@ ECGI_PER_MESH
Default - write each mesh exactly once to collada. Optimal but will not work with many tools.
E_COLLADA_IRR_COLOR
Irrlicht colors which can be mapped to E_COLLADA_COLOR_SAMPLER values.
@ ECIC_AMBIENT
Use SMaterial::AmbientColor.
@ ECIC_EMISSIVE
Use SMaterial::EmissiveColor.
@ ECIC_NONE
Don't write this element at all.
@ ECIC_DIFFUSE
Use SMaterial::DiffuseColor.
@ ECIC_CUSTOM
Check IColladaMeshWriterProperties for custom color.
@ ECIC_SPECULAR
Use SMaterial::SpecularColor.
E_COLLADA_COLOR_SAMPLER
Color names collada uses in it's color samplers.
E_COLLADA_TECHNIQUE_FX
Lighting models - more or less the way Collada categorizes materials.
@ ECTF_PHONG
Phong shading, default in many external renderers.
@ ECTF_LAMBERT
diffuse shaded surface that is independent of lighting.
E_COLLADA_TRANSPARENT_FX
How to interpret the opacity in collada.
@ ECOF_A_ONE
default - only alpha channel of color or texture is used.
@ ECOF_RGB_ZERO
Alpha values for each RGB channel of color or texture are used.
Everything in the Irrlicht Engine can be found in this namespace.
Definition aabbox3d.h:13
float f32
32 bit floating point variable.
Definition irrTypes.h:104
signed int s32
32 bit signed variable.
Definition irrTypes.h:66