3dsmodel.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:5k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // 3dsmodel.cpp
  2. // 
  3. // Copyright (C) 2000, Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #include "3dsmodel.h"
  10. using namespace std;
  11. M3DColor::M3DColor() :
  12.     red(0), green(0), blue(0)
  13. {
  14. }
  15. M3DColor::M3DColor(float _red, float _green, float _blue) :
  16.     red(_red), green(_green), blue(_blue)
  17. {
  18. }
  19. M3DMaterial::M3DMaterial() :
  20.     ambient(0, 0, 0),
  21.     diffuse(0, 0, 0),
  22.     specular(0, 0, 0),
  23.     shininess(1.0f)
  24. {
  25. }
  26. string M3DMaterial::getName() const
  27. {
  28.     return name;
  29. }
  30. void M3DMaterial::setName(string _name)
  31. {
  32.     name = _name;
  33. }
  34. M3DColor M3DMaterial::getDiffuseColor() const
  35. {
  36.     return diffuse;
  37. }
  38. void M3DMaterial::setDiffuseColor(M3DColor color)
  39. {
  40.     diffuse = color;
  41. }
  42. M3DColor M3DMaterial::getAmbientColor() const
  43. {
  44.     return ambient;
  45. }
  46. void M3DMaterial::setAmbientColor(M3DColor color)
  47. {
  48.     ambient = color;
  49. }
  50. M3DColor M3DMaterial::getSpecularColor() const
  51. {
  52.     return specular;
  53. }
  54. void M3DMaterial::setSpecularColor(M3DColor color)
  55. {
  56.     specular = color;
  57. }
  58. float M3DMaterial::getShininess() const
  59. {
  60.     return shininess;
  61. }
  62. void M3DMaterial::setShininess(float _shininess)
  63. {
  64.     shininess = _shininess;
  65. }
  66. float M3DMaterial::getOpacity() const
  67. {
  68.     return opacity;
  69. }
  70. void M3DMaterial::setOpacity(float _opacity)
  71. {
  72.     opacity = _opacity;
  73. }
  74. string M3DMaterial::getTextureMap() const
  75. {
  76.     return texmap;
  77. }
  78. void M3DMaterial::setTextureMap(const string& _texmap)
  79. {
  80.     texmap = _texmap;
  81. }
  82. M3DTriangleMesh::M3DTriangleMesh()
  83. {
  84.     matrix = Mat4f::identity();
  85. }
  86. M3DTriangleMesh::~M3DTriangleMesh()
  87. {
  88. }
  89. Mat4f M3DTriangleMesh::getMatrix() const
  90. {
  91.     return matrix;
  92. }
  93. void M3DTriangleMesh::setMatrix(const Mat4f& m)
  94. {
  95.     matrix = m;
  96. }
  97. Point3f M3DTriangleMesh::getVertex(uint16 n) const
  98. {
  99.     return points[n];
  100. }
  101. uint16 M3DTriangleMesh::getVertexCount() const
  102. {
  103.     return (uint16) (points.size());
  104. }
  105. void M3DTriangleMesh::addVertex(Point3f p)
  106. {
  107.     points.insert(points.end(), p);
  108. }
  109. Point2f M3DTriangleMesh::getTexCoord(uint16 n) const
  110. {
  111.     return texCoords[n];
  112. }
  113. uint16 M3DTriangleMesh::getTexCoordCount() const
  114. {
  115.     return (uint16) (texCoords.size());
  116. }
  117. void M3DTriangleMesh::addTexCoord(Point2f p)
  118. {
  119.     texCoords.insert(texCoords.end(), p);
  120. }
  121. void M3DTriangleMesh::getFace(uint16 n, uint16& v0, uint16& v1, uint16& v2) const
  122. {
  123.     int m = (int) n * 3;
  124.     v0 = faces[m];
  125.     v1 = faces[m + 1];
  126.     v2 = faces[m + 2];
  127. }
  128. uint16 M3DTriangleMesh::getFaceCount() const
  129. {
  130.     return (uint16) (faces.size() / 3);
  131. }
  132. void M3DTriangleMesh::addFace(uint16 v0, uint16 v1, uint16 v2)
  133. {
  134.     faces.insert(faces.end(), v0);
  135.     faces.insert(faces.end(), v1);
  136.     faces.insert(faces.end(), v2);
  137. }
  138. uint32 M3DTriangleMesh::getSmoothingGroups(uint16 face) const
  139. {
  140.     if (face < smoothingGroups.size())
  141.         return smoothingGroups[face];
  142.     else
  143.         return 0;
  144. }
  145. void M3DTriangleMesh::addSmoothingGroups(uint32 smGroups)
  146. {
  147.     smoothingGroups.insert(smoothingGroups.end(), smGroups);
  148. }
  149. uint16 M3DTriangleMesh::getSmoothingGroupCount() const
  150. {
  151.     return (uint16) (smoothingGroups.size());
  152. }
  153. string M3DTriangleMesh::getMaterialName() const
  154. {
  155.     return materialName;
  156. }
  157. void M3DTriangleMesh::setMaterialName(string _materialName)
  158. {
  159.     materialName = _materialName;
  160. }
  161. M3DModel::M3DModel()
  162. {
  163. }
  164. M3DModel::~M3DModel()
  165. {
  166.     for (unsigned int i = 0; i < triMeshes.size(); i++)
  167.         if (triMeshes[i] != NULL)
  168.             delete triMeshes[i];
  169. }
  170. M3DTriangleMesh* M3DModel::getTriMesh(uint32 n)
  171. {
  172.     if (n < triMeshes.size())
  173.         return triMeshes[n];
  174.     else
  175.         return NULL;
  176. }
  177. uint32 M3DModel::getTriMeshCount()
  178. {
  179.     return triMeshes.size();
  180. }
  181. void M3DModel::addTriMesh(M3DTriangleMesh* triMesh)
  182. {
  183.     triMeshes.insert(triMeshes.end(), triMesh);
  184. }
  185. void M3DModel::setName(const string _name)
  186. {
  187.     name = _name;
  188. }
  189. const string M3DModel::getName() const
  190. {
  191.     return name;
  192. }
  193. M3DScene::M3DScene()
  194. {
  195. }
  196. M3DScene::~M3DScene()
  197. {
  198.     unsigned int i;
  199.     for (i = 0; i < models.size(); i++)
  200.         if (models[i] != NULL)
  201.             delete models[i];
  202.     for (i = 0; i < materials.size(); i++)
  203.         if (materials[i] != NULL)
  204.             delete materials[i];
  205. }
  206. M3DModel* M3DScene::getModel(uint32 n) const
  207. {
  208.     if (n < models.size())
  209.         return models[n];
  210.     else
  211.         return NULL;
  212. }
  213. uint32 M3DScene::getModelCount() const
  214. {
  215.     return models.size();
  216. }
  217. void M3DScene::addModel(M3DModel* model)
  218. {
  219.     models.insert(models.end(), model);
  220. }
  221. M3DMaterial* M3DScene::getMaterial(uint32 n) const
  222. {
  223.     if (n < materials.size())
  224.         return materials[n];
  225.     else
  226.         return NULL;
  227. }
  228. uint32 M3DScene::getMaterialCount() const
  229. {
  230.     return materials.size();
  231. }
  232. void M3DScene::addMaterial(M3DMaterial* material)
  233. {
  234.     materials.insert(materials.end(), material);
  235. }
  236. M3DColor M3DScene::getBackgroundColor() const
  237. {
  238.     return backgroundColor;
  239. }
  240. void M3DScene::setBackgroundColor(M3DColor color)
  241. {
  242.     backgroundColor = color;
  243. }