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

OpenGL

开发平台:

Visual C++

  1. // modelfile.h
  2. //
  3. // Copyright (C) 2004, 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 _CELMESH_MODELFILE_H_
  10. #define _CELMESH_MODELFILE_H_
  11. #include "model.h"
  12. #include <iostream>
  13. #include <string>
  14. #define CEL_MODEL_HEADER_LENGTH 16
  15. #define CEL_MODEL_HEADER_ASCII "#celmodel__ascii"
  16. #define CEL_MODEL_HEADER_BINARY "#celmodel_binary"
  17. class ModelLoader
  18. {
  19.  public:
  20.     ModelLoader();
  21.     virtual ~ModelLoader();
  22.     virtual Model* load() = 0;
  23.     const std::string& getErrorMessage() const;
  24.     void setTexturePath(const std::string&);
  25.     const std::string& getTexturePath() const;
  26.     
  27.     static ModelLoader* OpenModel(std::istream& in);
  28.  protected:
  29.     virtual void reportError(const std::string&);
  30.  private:
  31.     std::string errorMessage;
  32.     std::string texPath;
  33. };
  34. class ModelWriter
  35. {
  36.  public:
  37.     virtual ~ModelWriter() {};
  38.     virtual bool write(const Model&) = 0;
  39. };
  40. Model* LoadModel(std::istream&);
  41. Model* LoadModel(std::istream& in, const std::string& texPath);
  42. bool SaveModelAscii(const Model* model, std::ostream& out);
  43. bool SaveModelBinary(const Model* model, std::ostream& out);
  44. // Binary file tokens
  45. enum ModelFileToken
  46. {
  47.     CMOD_Material       = 1001,
  48.     CMOD_EndMaterial    = 1002,
  49.     CMOD_Diffuse        = 1003,
  50.     CMOD_Specular       = 1004,
  51.     CMOD_SpecularPower  = 1005,
  52.     CMOD_Opacity        = 1006,
  53.     CMOD_Texture        = 1007,
  54.     CMOD_Mesh           = 1009,
  55.     CMOD_EndMesh        = 1010,
  56.     CMOD_VertexDesc     = 1011,
  57.     CMOD_EndVertexDesc  = 1012,
  58.     CMOD_Vertices       = 1013,
  59.     CMOD_Emissive       = 1014,
  60.     CMOD_Blend          = 1015,
  61. };
  62. enum ModelFileType
  63. {
  64.     CMOD_Float1         = 1,
  65.     CMOD_Float2         = 2,
  66.     CMOD_Float3         = 3,
  67.     CMOD_Float4         = 4,
  68.     CMOD_String         = 5,
  69.     CMOD_Uint32         = 6,
  70.     CMOD_Color          = 7,
  71. };
  72. #endif // !_CELMESH_MODELFILE_H_