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

OpenGL

开发平台:

Visual C++

  1. // 3dsmodel.h
  2. // 
  3. // Copyright (C) 2001, 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. #ifndef _3DSMODEL_H_
  10. #define _3DSMODEL_H_
  11. #include <vector>
  12. #include <string>
  13. #include <celutil/basictypes.h>
  14. #include <celmath/vecmath.h>
  15. class M3DColor
  16. {
  17.  public:
  18.     M3DColor();
  19.     M3DColor(float, float, float);
  20.  public:
  21.     float red, green, blue;
  22. };
  23. class M3DMaterial
  24. {
  25.  public:
  26.     M3DMaterial();
  27.     std::string getName() const;
  28.     void setName(std::string);
  29.     M3DColor getAmbientColor() const;
  30.     void setAmbientColor(M3DColor);
  31.     M3DColor getDiffuseColor() const;
  32.     void setDiffuseColor(M3DColor);
  33.     M3DColor getSpecularColor() const;
  34.     void setSpecularColor(M3DColor);
  35.     float getShininess() const;
  36.     void setShininess(float);
  37.     float getOpacity() const;
  38.     void setOpacity(float);
  39.     std::string getTextureMap() const;
  40.     void setTextureMap(const std::string&);
  41.  private:
  42.     std::string name;
  43.     std::string texmap;
  44.     M3DColor ambient;
  45.     M3DColor diffuse;
  46.     M3DColor specular;
  47.     float shininess;
  48.     float opacity;
  49. };
  50. class M3DTriangleMesh
  51. {
  52.  public:
  53.     M3DTriangleMesh();
  54.     ~M3DTriangleMesh();
  55.     Mat4f getMatrix() const;
  56.     void setMatrix(const Mat4f&);
  57.     Point3f getVertex(uint16) const;
  58.     uint16 getVertexCount() const;
  59.     void addVertex(Point3f);
  60.     Point2f getTexCoord(uint16) const;
  61.     uint16 getTexCoordCount() const;
  62.     void addTexCoord(Point2f);
  63.     void getFace(uint16, uint16&, uint16&, uint16&) const;
  64.     uint16 getFaceCount() const;
  65.     void addFace(uint16, uint16, uint16);
  66.     void addSmoothingGroups(uint32);
  67.     uint32 getSmoothingGroups(uint16) const;
  68.     uint16 getSmoothingGroupCount() const;
  69.     std::string getMaterialName() const;
  70.     void setMaterialName(std::string);
  71.     
  72.  private:
  73.     std::vector<Point3f> points;
  74.     std::vector<Point2f> texCoords;
  75.     std::vector<uint16> faces;
  76.     std::vector<uint32> smoothingGroups;
  77.     Mat4f matrix;
  78.     std::string materialName;
  79. };
  80. class M3DModel
  81. {
  82.  public:
  83.     M3DModel();
  84.     ~M3DModel();
  85.     M3DTriangleMesh* getTriMesh(uint32);
  86.     uint32 getTriMeshCount();
  87.     void addTriMesh(M3DTriangleMesh*);
  88.     void setName(const std::string);
  89.     const std::string getName() const;
  90.  private:
  91.     std::string name;
  92.     std::vector<M3DTriangleMesh*> triMeshes;
  93. };
  94. class M3DScene
  95. {
  96.  public:
  97.     M3DScene();
  98.     ~M3DScene();
  99.     M3DModel* getModel(uint32) const;
  100.     uint32 getModelCount() const;
  101.     void addModel(M3DModel*);
  102.     M3DMaterial* getMaterial(uint32) const;
  103.     uint32 getMaterialCount() const;
  104.     void addMaterial(M3DMaterial*);
  105.     M3DColor getBackgroundColor() const;
  106.     void setBackgroundColor(M3DColor);
  107.  private:
  108.     std::vector<M3DModel*> models;
  109.     std::vector<M3DMaterial*> materials;
  110.     M3DColor backgroundColor;
  111. };
  112. #endif // _3DSMODEL_H_