IRRLoader.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /*
  2. Open Asset Import Library (ASSIMP)
  3. ----------------------------------------------------------------------
  4. Copyright (c) 2006-2008, ASSIMP Development Team
  5. All rights reserved.
  6. Redistribution and use of this software in source and binary forms,
  7. with or without modification, are permitted provided that the
  8. following conditions are met:
  9. * Redistributions of source code must retain the above
  10. copyright notice, this list of conditions and the
  11. following disclaimer.
  12. * Redistributions in binary form must reproduce the above
  13. copyright notice, this list of conditions and the
  14. following disclaimer in the documentation and/or other
  15. materials provided with the distribution.
  16. * Neither the name of the ASSIMP team, nor the names of its
  17. contributors may be used to endorse or promote products
  18. derived from this software without specific prior
  19. written permission of the ASSIMP Development Team.
  20. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23. A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24. OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25. SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28. THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. ----------------------------------------------------------------------
  32. */
  33. /** @file Declaration of the .irrMesh (Irrlight Engine Mesh Format)
  34. importer class. */
  35. #ifndef AI_IRRLOADER_H_INCLUDED
  36. #define AI_IRRLOADER_H_INCLUDED
  37. #include "IRRMeshLoader.h"
  38. namespace Assimp {
  39. // ---------------------------------------------------------------------------
  40. /** Irr importer class.
  41. *
  42. * Irr is the native scene file format of the Irrlight engine and its editor
  43. * irrEdit. As IrrEdit itself is capable of importing quite many file formats,
  44. * it might be a good file format for data exchange.
  45. */
  46. class IRRImporter : public BaseImporter, public IrrlichtBase
  47. {
  48. friend class Importer;
  49. protected:
  50. /** Constructor to be privately used by Importer */
  51. IRRImporter();
  52. /** Destructor, private as well */
  53. ~IRRImporter();
  54. public:
  55. // -------------------------------------------------------------------
  56. /** Returns whether the class can handle the format of the given file.
  57. * See BaseImporter::CanRead() for details.
  58. */
  59. bool CanRead( const std::string& pFile, IOSystem* pIOHandler) const;
  60. protected:
  61. // -------------------------------------------------------------------
  62. /** Called by Importer::GetExtensionList() for each loaded importer.
  63. * See BaseImporter::GetExtensionList() for details
  64. */
  65. void GetExtensionList(std::string& append)
  66. {
  67. /* NOTE: The file extenxsion .xml is too generic. We'll
  68. * need to open the file in CanRead() and check whether it is
  69. * a real irrlicht file
  70. */
  71. append.append("*.xml;*.irr");
  72. }
  73. // -------------------------------------------------------------------
  74. /** Imports the given file into the given scene structure.
  75. * See BaseImporter::InternReadFile() for details
  76. */
  77. void InternReadFile( const std::string& pFile, aiScene* pScene,
  78. IOSystem* pIOHandler);
  79. private:
  80. /** Data structure for a scenegraph node in an IRR file
  81. */
  82. struct Node
  83. {
  84. // Type of the node
  85. enum ET
  86. {
  87. LIGHT,
  88. CUBE,
  89. MESH,
  90. SKYBOX,
  91. DUMMY,
  92. CAMERA,
  93. TERRAIN,
  94. SPHERE,
  95. ANIMMESH
  96. } type;
  97. Node(ET t)
  98. : type (t)
  99. , scaling (1.f,1.f,1.f) // assume uniform scaling by default
  100. , animation (NULL)
  101. , framesPerSecond (0.f)
  102. {
  103. // Generate a default name for the node
  104. char buffer[128];
  105. static int cnt;
  106. ::sprintf(buffer,"IrrNode_%i",cnt++);
  107. name = std::string(buffer);
  108. // reserve space for up to 5 materials
  109. materials.reserve(5);
  110. // reserve space for up to 5 children
  111. children.reserve(5);
  112. }
  113. // Transformation of the node
  114. aiVector3D position, rotation, scaling;
  115. // Name of the node
  116. std::string name;
  117. // List of all child nodes
  118. std::vector<Node*> children;
  119. // Parent node
  120. Node* parent;
  121. // Animation channels that belongs to this node
  122. aiNodeAnim* animation;
  123. // Animated meshes: frames per second
  124. // 0.f if not specified
  125. float framesPerSecond;
  126. //! Meshes: List of materials to be assigned
  127. //! along with their corresponding material flags
  128. std::vector< std::pair<aiMaterial*, unsigned int> > materials;
  129. };
  130. };
  131. } // end of namespace Assimp
  132. #endif // AI_IRRIMPORTER_H_INC