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

OpenGL

开发平台:

Visual C++

  1. // meshmanager.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 _CELENGINE_MESHMANAGER_H_
  10. #define _CELENGINE_MESHMANAGER_H_
  11. #include <string>
  12. #include <map>
  13. #include <celutil/resmanager.h>
  14. #include <celengine/model.h>
  15. class GeometryInfo : public ResourceInfo<Geometry>
  16. {
  17.  public:
  18.     std::string source;
  19.     std::string path;
  20.     bool resolvedToPath;
  21.     Vec3f center;
  22.     float scale;
  23.     bool isNormalized;
  24.     GeometryInfo(const std::string _source,
  25.                  const std::string _path = "") :
  26.         source(_source),
  27.         path(_path),
  28.         resolvedToPath(false),
  29.         center(0.0f, 0.0f, 0.0f),
  30.         scale(1.0f),
  31.         isNormalized(true)
  32.         {};
  33.     GeometryInfo(const std::string _source,
  34.                  const std::string _path,
  35.                  const Vec3f& _center,
  36.                  float _scale,
  37.                  bool _isNormalized) :
  38.         source(_source),
  39.         path(_path),
  40.         resolvedToPath(false),
  41.         center(_center),
  42.         scale(_scale),
  43.         isNormalized(_isNormalized)
  44.         {};
  45.     virtual std::string resolve(const std::string&);
  46.     virtual Geometry* load(const std::string&);
  47. };
  48. inline bool operator<(const GeometryInfo& g0, const GeometryInfo& g1)
  49. {
  50.     if (g0.source != g1.source)
  51.         return g0.source < g1.source;
  52.     else if (g0.path != g1.path)
  53.         return g0.path < g1.path;
  54.     else if (g0.isNormalized != g1.isNormalized)
  55.         return (int) g0.isNormalized < (int) g1.isNormalized;
  56.     else if (g0.scale != g1.scale)
  57.         return g0.scale < g1.scale;
  58.     else if (g0.center.x != g1.center.x)
  59.         return g0.center.x < g1.center.x;
  60.     else if (g0.center.y != g1.center.y)
  61.         return g0.center.y < g1.center.y;
  62.     else
  63.         return g0.center.z < g1.center.z;
  64. }
  65. typedef ResourceManager<GeometryInfo> GeometryManager;
  66. extern GeometryManager* GetGeometryManager();
  67. #endif // _CELENGINE_MESHMANAGER_H_